2

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

具体来说,我想为 if 绑定提供一个 slideUp/slideDown jQuery 动画。但是,我无法让 KO “看到”我的自定义绑定。如果绑定将不胜感激,请指出关于扩展的正确方向。

补充笔记:

我从这里使用 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”绑定,只是按原样显示我的模板。

4

2 回答 2

2

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

您要么需要自己使用绑定,要么为执行动画slidingIf的绑定编写一个包装器。template

于 2012-07-17T15:08:50.530 回答
1

我试过这个,但发现我的“内部”绑定失败了,所以我做了这个改变:

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

于 2014-03-19T18:18:20.170 回答