2016-10-18 3 views
0

Eine meiner ng-table Spalten enthält ein selectize dropdown. Der Wert dieser Spalte ist ein Fremdschlüssel für eine andere Tabelle. Anstatt diesen Schlüssel anzuzeigen, möchte ich ein anderes Attribut (Name) der Zeile anzeigen, die dieser Schlüssel darstellt. Meine Daten sind in einem Array namens Tabelle.Benutzerdefiniertes Filtern/Sortieren mit ng-table und selectize

Ich habe das Dropdown korrekt angezeigt mit einem anderen Array, fkTable.

<selectize ng-model="row[col.name]" 
         options='fkTable' 
         config='fkConfig'"> 

wo fkConfig:

$scope.fkConfig = { 
     maxItems: 1, 
     valueField: 'id', 
     labelField: 'name', 
     searchField: 'name' 
    }; 

Jetzt habe ich diese Spalte in der Lage sein wollen, zu filtern und um basierend auf dem fremden Namen Reihen, nicht-ID.

ich versuchte, über diese Zuordnung die IDs, um ihre Namen zu gehen:

$scope.foreignRowNames = { 
    0:"not grouped" 
    1:"Google" 
    14:"Youtube" 
} 

und durch einen benutzerdefinierten Filter für diese bestimmte Spalte zu erstellen:

function filterSelectizeColumn(table, searchTerm) { 
    for (var i = 0; i < table.length; i++) { 
      var fkValue = table[i].fk; 
      var foreignRowName = $scope.foreignRowNames[fkValue]]; 

      if (foreignRowName.indexOf(searchTerm) == -1) { 
       table = table.splice(i, 1); 
      } 
    } 
} 

Aber das scheint eine peinliche und ineffiziente Art und Weise etwas zu tun, was ich aufgrund der Popularität der beiden Bibliotheken für ein allgemeines Problem gehalten hätte.

Meine Frage ist, wie kann ich effizient einen benutzerdefinierten Filter für diese Fremdschlüsselspalte erstellen.

Antwort

0

Die Lösung, die ich mit gegangen:

  • ersetzen alle Fremdschlüssel mit dem entsprechenden Namen
  • wenn Änderungen machen, Namen, um die Schlüssel zurück zu konvertieren stellen sie