2017-12-31 35 views
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); 
     } 
    } 
} 
+0

'marker.title === title'は、両方の文字列の内容が同じ場合にのみ一致します。あなたは部分文字列一致を探しています。この質問はあなたに役立ちます:https://stackoverflow.com/questions/1789945/how-to-check-whether-a-string-contains-a-substring-in-javascript –

答えて

1

私の推測では、titleobservableであるということですので、あなたはclick: toggleGroup.bind($data, $data.title())を行う必要があります。 またはclick: function(data, event) { toggleGroup(data.title()) }

関連する問題