我想知道是否可以在knockout.js中为事件创建多个绑定
示例:
<span data-bind="click: function1 function2, attr: {}"></span>
答案 0 :(得分:52)
尝试使用
<span data-bind="click: function() { function1(); function2() }"></span>
答案 1 :(得分:2)
编辑:我不假思索地意外地使用了MooTools typeOf()。固定的。
这就是我想出的。我承认在大多数情况下这样做太过分了,但模板方面的语法更清晰:
查看型号:
var ViewModel = new function() {
this.call = function(functions,args) {
if (!(functions instanceof Array))
functions = [functions];
if (!(args instanceof Array))
args = [args];
return function() {
for (var i = 0, l = functions.length; i < l; i++) {
functions[i].apply(this,args);
}
}
}
this.testValue=ko.observable('Click me!');
this.click1 = function(foo) {
this.testValue('click1 ' + foo);
alert(1);
}
this.click2 = function(foo) {
this.testValue('click2 ' + foo);
alert(2);
}
}
和模板
<span data-bind="click:call([click1,click2],['Test value'])">Test span</span>
答案 2 :(得分:1)
如何'自定义简单绑定clickArray
:
ko.bindingHandlers.clickArray = {
init: function (element, valueAccessor) {
var handlers = valueAccessor();
ko.applyBindingsToNode(element, {
click: function () {
for (var i = 0; i < handlers.length; i++) {
handlers[i].apply(this, arguments);
}
}
});
}
};
然后你换一些HTML:
<div id="foo">
<a data-bind="clickArray: [bar, baz]">Click</a>
</div>
...并制作模型:
var viewModel = {
bar: function () {
alert('Bar!');
},
baz: function () {
alert('Baz.');
}
}
}
ko.applyBindings(viewModel, document.getElementById('foo'));
答案 3 :(得分:-1)
我在我的代码中尝试了这个,它似乎有效:
<button data-bind="click: viewMode.bind($data, 'view'), click: itemUpdate">