首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >knockoutjs重写bindinghandlers

knockoutjs重写bindinghandlers
EN

Stack Overflow用户
提问于 2012-01-25 19:45:07
回答 1查看 7K关注 0票数 7

您好,我正在尝试设置ko,以便在任何单击处理程序被调用时,都会运行一些自定义代码。将一些pre和post代码添加到'click‘绑定处理程序中最简单的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2012-01-25 21:24:58

您可以创建包装click绑定的自定义绑定,也可以保存对click绑定的原始initupdate函数的引用并替换实际的函数。

您可以选择执行update函数中的一些代码,这些代码将在更新模型值时触发(由附加在init函数中的事件处理程序或以编程方式执行),或者将代码作为实际处理程序的一部分执行。我听起来你想要后者。

您的绑定可能如下所示:

代码语言:javascript
复制
(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);
        }
    };
})();

我拆分了pre/post代码,以便在运行时可以覆盖ko.bindingHandlers.click.preOnClickko.bindingHandlers.click.postOnClick

下面是一个示例:http://jsfiddle.net/rniemeyer/PksAn/

如果您需要在更新函数中运行自定义代码,则可以将其拆分并在其中运行您的pre和post代码,并在两者之间执行originalUpdate

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9002163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档