knockout点击绑定无法调用JS函数

时间:2016-06-15 20:52:19

标签: javascript knockout.js

我有一个列表中的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”的范围。功能,你可以在回购中看到它,我不想为了简单起见而包含所有这些功能。

1 个答案:

答案 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是什么样的。 但是,我认为内部功能不会暴露于绑定。