2016-10-18 5 views
0

Une de mes colonnes ng-table contient une liste déroulante de sélection. La valeur de cette colonne est une clé étrangère pour une autre table. Au lieu d'afficher cette clé, je souhaite afficher un autre attribut (nom) de la ligne représentée par cette clé. Mes données se trouvent dans un tableau appelé table.Filtrage personnalisé/commande avec ng-table et selectize

J'ai la liste déroulante affichant correctement en utilisant un autre tableau, fkTable.

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

où fkConfig:

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

Maintenant, je veux être en mesure de filtrer et d'ordre cette colonne en fonction du nom des lignes étrangères, pas id.

J'ai essayé d'aller sur cette mise en correspondance des ids à leurs noms:

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

et en créant un filtre personnalisé pour cette colonne spécifique:

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); 
      } 
    } 
} 

Mais cela semble une façon maladroite et inefficace d'aller sur quelque chose que j'aurais pensé être un problème assez commun en raison de la popularité des deux bibliothèques.

Ma question est comment puis-je créer efficacement un filtre personnalisé pour cette colonne de clé étrangère.

Répondre

0

La solution que je suis allé avec:

  • remplacer toutes les clés étrangères avec leur nom correspondant
  • lors de modifications, convertir les noms à la clés qu'ils représentent