2017-12-31 13 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)가 작동하지 않습니다.

이 내 현재 뷰 모델입니다 :

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()) }.

관련 문제