0
私はいくつかの場所でGoogleマップを持っています。対応するリストアイテムをクリックすると、マップマーカーをフィルタにかけて取得しようとしています。もちろんノックアウト:Foreachパラメータでバインディングをクリック
<tbody data-bind="foreach: filteredItems()">
<tr data-bind="click: toggleGroup('Michi Ramen')">
<td id="listTitle" data-bind="text: $data.title"></td>
</tr>
</tbody>
、各リスト項目は、正確なものをフィルタリングします:私はそうのようなマーカーのタイトルの正確な文字列に入れた場合、私は仕事にそれを得ることができる唯一の方法です。パットするtoggleGroup.bind($data.title)
は機能しません。
これが私の現在のViewModelです:
var viewModel = function(data) {
var self = this;
self.filters = ko.observableArray(data.filters);
self.filter = ko.observable('');
self.shops = data.shops;
self.filteredItems = ko.dependentObservable(function() {
var filter = self.filter().toLowerCase();
if (!filter) {
return self.shops();
} else {
return ko.utils.arrayFilter(self.shops(), function(Shop) {
return Shop.title().toLowerCase().indexOf(filter) !== -1;
});
}
}, viewModel);
};
そして、これは私がしようとすると、マーカーをフィルタリングするために使用している機能です。
function toggleGroup(title) {
var i;
for (i = 0; i < markers.length; i++) {
var marker = markers[i];
if (marker.title === title) {
marker.setVisible(true);
} else {
markers[i].setVisible(false);
}
}
}
'marker.title === title'は、両方の文字列の内容が同じ場合にのみ一致します。あなたは部分文字列一致を探しています。この質問はあなたに役立ちます:https://stackoverflow.com/questions/1789945/how-to-check-whether-a-string-contains-a-substring-in-javascript –