レストランのリストを取得してGoogleマップに表示するアプリを開発しています。このリストも表示されるので、ユーザーはレストランの名前を見ることができます。Knockout.Jsを使用してフィルタリングされたリストの結果を表示するにはどうすればよいですか?
Knockout.jsを使用してリストをフィルタリングして、誰かがレストランの名前を入力し始めたときに、そのクエリに一致するものだけが表示されるようにします。
HTML +ノックアウトバインディング
<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 `
私がこれまで持っている論理が働く - 私はconsole.log(restaurantName)
を使用する場合、それが唯一の正しい出力しますレストラン。私はそれをビューに表示することはできません。
リストビューに表示するにはどうすればよいですか?
これはhttps://stackoverflow.com/questions/45422066/set-marker-visible-with-knockout-js-ko-utils-arrayfilterと非常によく似ています。あなたの場所を使用するようにフィドルを更新しました。 https://jsfiddle.net/dy70fe16/3/ –
[マーカーをノックアウトJS ko.utils.arrayFilterで表示する設定]の可能な複製(https://stackoverflow.com/questions/45422066/set-marker-visible-with- knockout-js-ko-utils-arrayfilter) –