我有一个列表中的API调用呈现结果列表(下面的HTML),并添加了一个带有Knockout的点击绑定到JS函数,该函数基本上取结果的名称,搜索谷歌地图标记的数组匹配,然后平移到地图元素上的标记并打开以前存储的infoWindow。当我打开开发人员工具时,我可以看到元素上有一个监听器,用于点击'指向Knockout功能的动作,但是当我点击时,没有任何反应。这是gitHub repo:https://github.com/ZackBoyd/BrewMap,如果它有用,具体代码如下。我觉得我忽略了一些非常基本的东西,请事先感谢你的帮助。
HTML
<ul class="results list" data-bind="foreach: filteredBreweries">
<li data-bind="click: $parent.goToMarker">
<div class="item">
<a class="image loaded">
<img data-bind="attr: { src: iconImage }">
</a>
<div class="wrapper">
<h4 data-bind="text: name"></h4>
<figure data-bind="text: address"></figure>
<figure data-bind="text: yearEstablished"></figure>
<figure data-bind="text: type"></figure>
</div>
</div>
</li>
</ul>
JS
function goToMarker(clickedBrewery){
var clickedBreweryName = clickedBrewery.name;
console.log(clickedBrewery);
console.log(clickedBreweryName);
for (var key in self.mapMarkers()) {
if (clickedBreweryName === self.mapMarkers()[key].marker.title) {
map.panTo(self.mapMarkers()[key].marker.position);
infowindow.setContent(self.mapMarkers[key].marker.content);
infowindow.open(map, self.mapMarkers()[key].marker);
}
}
};
此代码属于“appViewModel”的范围。功能,你可以在回购中看到它,我不想为了简单起见而包含所有这些功能。
答案 0 :(得分:0)
尝试将该函数分配给viewmodel中的变量。例如:
self.goToMarker = function(clickedBrewery){
var clickedBreweryName = clickedBrewery.name;
console.log(clickedBrewery);
console.log(clickedBreweryName);
for (var key in self.mapMarkers()) {
if (clickedBreweryName === self.mapMarkers()[key].marker.title) {
map.panTo(self.mapMarkers()[key].marker.position);
infowindow.setContent(self.mapMarkers[key].marker.content);
infowindow.open(map, self.mapMarkers()[key].marker);
}
}
};
我不知道你的viewmodel是什么样的。 但是,我认为内部功能不会暴露于绑定。