在Knockout自定义绑定处理程序中调用HTML中提供的方法

时间:2012-12-17 16:27:49

标签: knockout.js custom-binding hammer.js

我在我当前的项目中使用了knockout.js和hammer.js。我为hammer.js中的'tap'事件创建了一个自定义绑定处理程序(这也适用于其他事件,如hold或swipe)。我的问题是,在这个绑定处理程序中,我想调用我在HTML中的data-bind属性中提供的方法。根据淘汰文档,我发现我应该调用valueAccessor(),但不幸的是,这没有做任何事情。我创建了this 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!");
    }
});

1 个答案:

答案 0 :(得分: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
        };
    }
}

Updated fiddle