在调用自定义的淘汰赛中bindinghandler HTML提供的方法(Calling the me

2019-11-01 06:59发布

我用我的当前项目都knockout.js和hammer.js。 我创建了一个自定义绑定处理程序中hammer.js的“抽头”事件(这也应该为其他活动,如持有或滑动工作)。 我的问题是,在这个结合处理,我想打电话给我在HTML中的数据绑定属性的方法。 根据淘汰赛文档时,我发现,我应该叫valueAccessor(),但遗憾的是,这并没有做任何事情。 我创建这个小提琴 ,这应该给你我的问题的一个明显的例子。 感谢你们对我的帮助。

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!");
    }
});

Answer 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
        };
    }
}

更新小提琴



文章来源: Calling the method provided in HTML in Knockout custom bindinghandler