0

我在当前项目中同时使用了 knockout.js 和hammer.js。我在hammer.js 中为'tap' 事件创建了一个自定义绑定处理程序(这也适用于其他事件,例如保持或滑动)。我的问题是,在这个绑定处理程序中,我想调用我在 HTML 的 data-bind 属性中提供的方法。根据淘汰文档,我发现我应该调用 valueAccessor(),但不幸的是,这没有任何作用。我已经创建了这个 Fiddle,它应该给你一个我的问题的清晰例子。感谢你们对我的帮助。

HTML:

<button data-bind="tap: myFunction">Click Me</button>

JS:

ko.bindingHandlers.tap = {
    'init': function(element, valueAccessor) {

        var tap = new Hammer(element);
        tap.ontap = function(ev){
            //call the method provided in HTML, in this case doSomething();
            // I've tried calling valueAccessor(); but this doesn't seem to work
        };
    }
}

ko.applyBindings({
    myFunction: function() {
        document.write("BAM!");
    }
});
4

1 回答 1

1

调用valueAccessor只是让您访问绑定中设置的对象。由于它是一个函数并且您想调用它,因此您必须调用调用的结果valueAccessor

ko.bindingHandlers.tap = {
    'init': function(element, valueAccessor) {
        var tap = new Hammer(element);
        var value = valueAccessor(); // get the value (the function)
        tap.ontap = function(ev){
            //call the method provided in HTML, in this case doSomething();
            value(); // call the function
        };
    }
}

更新的小提琴

于 2012-12-17T16:38:18.767 回答