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)
가 작동하지 않습니다.
이 내 현재 뷰 모델입니다 :
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 –