我在我当前的项目中使用了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!");
}
});
答案 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
};
}
}