2017-10-10 2 views
2

Nouveauté de Knockout et simplement essayer de montrer un exemple rapide de liaison de données à des fins de démonstration seulement. Je veux garder le texte dans les éléments de liste cachés, et montre juste les allumettes.Comment cacher les données et montrer seulement quand il y a une correspondance?

http://jsfiddle.net/4y8jgsyg/

var viewModel = { 
    query: ko.observable('') 
}; 

viewModel.beers = ko.dependentObservable(function() { 
    var search = this.query().toLowerCase(); 
    return ko.utils.arrayFilter(beers, function(beer) { 
     return beer.name.toLowerCase().indexOf(search) >= 0; 
    }); 
}, viewModel); 

ko.applyBindings(viewModel); 
+1

Voulez-vous dire de garder d'autres objets cachés lorsque la boîte de recherche est vide? Comme [this] (http://jsfiddle.net/4y8jgsyg/1/)? – Nisarg

+0

Knockout 1x est vraiment vieux. –

+1

@NisargShah exactement! Merci. Je suis conscient que KO 1 est obsolète. (Encore une fois c'était juste une démo rapide, pas de code de production.) – Jake

Répondre

0

Vous devez vous assurer que les résultats des rendements de filtre uniquement si le terme de recherche n'est pas une chaîne vide. Cela peut être facilement accompli en vérifiant search.length > 0 et retourner un tableau vide si c'est le cas.

viewModel.beers = ko.dependentObservable(function() { 
    var search = this.query().toLowerCase(); 
    if(search && search.length > 0) { 
     return ko.utils.arrayFilter(beers, function(beer) { 
      return beer.name.toLowerCase().indexOf(search) >= 0; 
     }); 
    } else { 
     return []; 
    } 
}, viewModel); 

est ici le violon mis à jour: http://jsfiddle.net/4y8jgsyg/1/