KnockoutJS:在自定义绑定中包装if绑定

时间:2012-07-17 09:11:33

标签: javascript knockout.js

我目前正在阅读使用Knockout创建自定义绑定的文档,我可以掌握这个概念,但我在实践中应用它时遇到了麻烦。

具体来说,我想为一个if绑定提供一个slideUp / slideDown jQuery动画。但是,我很难让KO“看到”我的自定义绑定。关于延伸if关于正确方向的一点,将非常感激。

附加说明:

我正在使用here中的KO外部模板引擎,如下所示:

<!-- ko template: { name: 'SummaryBox', if: expanded } --><!-- /ko -->

我创建了一个非常基本的自定义绑定来包装默认的'if':

ko.bindingHandlers['slidingIf'] = {
    init: function(element, valueAccessor, allBindingsAccessor, context) {
        return ko.bindingHandlers['if']['init'](element, valueAccessor, allBindingsAccessor, context);
    },
    update: function(element, valueAccessor, allBindingsAccessor, context) {
        return ko.bindingHandlers['if']['update'](element, valueAccessor, allBindingsAccessor, context);
    }
};
ko.virtualElements.allowedBindings['slidingIf'] = true;

但是当我用这个替换以前的绑定时,

<!-- ko template: { name: 'SummaryBox', slidingIf: expanded } --><!-- /ko -->

模板基本上忽略了'slidingIf'绑定,只是按原样显示我的模板。

2 个答案:

答案 0 :(得分:2)

传递给template绑定的值是该绑定的选项,而不是它们自己的单独绑定。因此,template绑定本身不知道您的slidingIf绑定。

您可能需要单独使用slidingIf绑定,或者为执行动画的template绑定编写包装。

答案 1 :(得分:1)

我试过这个,但发现我的内心&#34;绑定失败,所以我做了这个改变:

return ko.bindingHandlers['if']['update'].apply(this, Array.prototype.slice.call(arguments));