knockout.js – knockoutjs覆盖绑定处理程序

前端之家收集整理的这篇文章主要介绍了knockout.js – knockoutjs覆盖绑定处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,我正在尝试设置ko,以便在任何点击处理程序被调用一点点自定义代码运行.
什么是向“点击”绑定处理程序添加一些前置和后置代码的最简单方法

解决方法

您可以创建包装单击绑定的自定义绑定,也可以保存对原始init的引用,并更新单击绑定的更新功能并替换实际绑定.

您可以选择在更新函数中执行某些代码,这些代码将在更新模型值时触发(通过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,event);

                   //run some post code
                   ko.bindingHandlers.click.postOnClick.call(viewmodel,event);
                };

            };

            originalInit(element,wrappedValueAccessor,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.

猜你在找的JavaScript相关文章