6
嗨我想设置ko,以便任何点击处理程序被称为一点点的自定义代码运行。 什么是最简单的方式来添加一些前置和后置代码到'点击'绑定处理程序?knockoutjs覆盖绑定处理程序
嗨我想设置ko,以便任何点击处理程序被称为一点点的自定义代码运行。 什么是最简单的方式来添加一些前置和后置代码到'点击'绑定处理程序?knockoutjs覆盖绑定处理程序
您可以创建一个包装click
绑定自定义绑定或引用保存关闭的click
原init
和update
功能结合和替换真钞。
您可以选择在update
函数中执行一些代码,当模型值更新时(通过附加在init函数中的事件处理程序或以编程方式更新),或者作为实际处理程序的一部分执行代码。这听起来像你想要后者。
你的结合可能是这样的:
(function() {
var originalInit = ko.bindingHandlers.click.init,
originalUpdate = ko.bindingHandlers.click.update;
ko.bindingHandlers.click = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
var wrappedValueAccessor = function() {
return function(data, event) {
//run some pre code
ko.bindingHandlers.click.preOnClick.call(viewModel, data, event);
valueAccessor().call(viewModel, data, event);
//run some post code
ko.bindingHandlers.click.postOnClick.call(viewModel, data, event);
};
};
originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel, context);
},
update: originalUpdate,
preOnClick: function(data, event) {
alert("pre code for " + data.id);
},
postOnClick: function(data, event) {
alert("post code for " + data.id);
}
};
})();
我打出了前/后的代码,使得在运行时,你可以覆盖ko.bindingHandlers.click.preOnClick
或ko.bindingHandlers.click.postOnClick
这里是一个示例:http://jsfiddle.net/rniemeyer/PksAn/
如果您需要在更新功能中运行自定义代码,那么您可以将其拆分并在其中运行代码前和代码后执行originalUpdate
。
thanks RP。这很有意义。 – Chin
RP,你可以检查一下吗?我需要一个自定义绑定提供程序,http://stackoverflow.com/questions/14535102/binding-jagged-array-with-knockout – user960567
这应该是公认的答案,代码是正确的,解决方案是正确的。 –