【问题标题】:How to create a custom Knockout binding that augments the native value binding如何创建自定义 Knockout 绑定以增强本机值绑定
【发布时间】:2013-04-11 15:11:26
【问题描述】:

我正在创建一个自定义绑定,用于在 init 方法中设置焦点和模糊行为。否则,我希望这个自定义绑定能够像原生 Knockout 值绑定一样运行。

 ko.bindingHandlers.currencyValue = {

init: function (element, valueAccessor) {
    $(element).focus(function () {
        //focus behavior here...
    });

    $(element).blur(function () {
        //blur behavior here...
    });

   //what do I put here to get the native value binding behavior?
},
update: function (element, valueAccessor) {
    //what do I put here to get the native value binding behavior?
}

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    您应该调用ko.bindingHandlers.value.initko.bindingHandlers.value.update 函数:

    ko.bindingHandlers.currencyValue = {
    init: function (element, valueAccessor, allBindings, viewModel, context) {
        $(element).focus(function () {
            //focus behavior here...
        });
    
        $(element).blur(function () {
            //blur behavior here...
        });
    
       return ko.bindingHandlers.value.init(element, valueAccessor, allBindings, viewModel, context);
    },
    update: function (element, valueAccessor, allBindings, viewModel, context) {
        return ko.bindingHandlers.value.update(element, valueAccessor, allBindings, viewModel, context);
    }
    

    【讨论】:

    • 太棒了!我有一些非常相似的东西,但没有意识到我必须从 init 和 update 方法返回值。感谢 Artem 的快速响应!
    • 奇数 - 非常适合值绑定,但对于文本绑定,在使用 ko.bindingHandlers.text.init 时会失败并显示“对象没有 init 方法”
    【解决方案2】:

    一个稍微@Artem 的解决方案更易于维护和阅读的解决方案 - 万一有一天 KO 将额外的参数传递给initupdate 函数并且需要更少的击键:

    ko.bindingHandlers.currencyValue = {
    init: function (element, valueAccessor, allBindings, viewModel, context) {
        $(element).focus(function () {
            //focus behavior here...
        });
    
        $(element).blur(function () {
            //blur behavior here...
        });
    
       return ko.bindingHandlers.value.init.apply(this, arguments);
    },
    update: function (element, valueAccessor, allBindings, viewModel, context) {
        return ko.bindingHandlers.value.update.apply(this, arguments);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多