Je construis une application qui prend une liste de restaurants et les affiche sur une carte Google. J'affiche également cette liste afin que l'utilisateur puisse voir les noms des restaurants.Comment afficher les résultats d'une liste filtrée à l'aide de Knockout.Js?
Je veux filtrer la liste en utilisant Knockout.js de sorte que lorsque quelqu'un commence à taper le nom du restaurant, seuls ceux qui correspondent à la requête apparaissent.
HTML + knock-out Manchettes
<div>
<div id="search">
<input type="text" placeholder="Filter" data-bind="textInput:query">
</div>
<ul data-bind="foreach: restaurants">
<li data-bind="text: name"></li>
</ul>
</div>
<div id="map"></div>
JavaScript
var restaurants = [
{name: 'Chez Simone', location: {lat:48.8603937, lng: 2.3430545}},
{name: 'Cafe Coutume', location: {lat:48.851599, lng: 2.3162123}},
{name: 'Café Pinson', location: {lat:48.863732, lng: 2.3631037}},
{name: 'Sol Semilla', location: {lat:48.8730959, lng: 2.363135900000001}},
{name: 'Juice Lab Marais', location: {lat:48.8563595, lng: 2.3637123}}
];
//viewModel
var viewModel = function(){
var self = this;
self.restaurantList = ko.observableArray(restaurants);
//Stores user input
self.query = ko.observable('');
// Filters through observableArray and filters results using util.arrayFilter();
self.search = ko.computed(function(){
var query = this.query().toLowerCase();
if(!query) {
return self.restaurantList();
} else {
//go through restaurant list and for each restaurant, check if the letters in query
// appear in restaurant name. If so, display name. else don't.
var restaurantList = self.restaurantList();
for(i = 0; i < restaurantList.length; i++){
var restaurant = restaurantList[i];
var restaurantName = restaurant.name;
// check if query letter/s appears in restaurant name
if(restaurantName.toLowerCase().indexOf(query) > -1){
// Help! This is where I'm stuck.
return restaurantName;
}
}
}
}, self);
}; // viewModel ends `
La logique que j'ai tellement fonctionne bien - si je l'utilise console.log(restaurantName)
il imprime seulement le bon Restaurants. Je ne peux pas le faire apparaître dans la vue.
Comment l'afficher dans la liste?
cela ressemble assez à https://stackoverflow.com/questions/45422066/set-marker-visible-with-knockout-js-ko-utils-arrayfilter J'ai mis à jour le violon pour utiliser vos emplacements. https://jsfiddle.net/dy70fe16/3/ –
Copie possible de [Définir le marqueur visible avec knockout JS ko.utils.arrayFilter] (https://stackoverflow.com/questions/45422066/set-marker-visible-with- knockout-js-ko-utils-arrayfilter) –