我目前正在阅读使用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'绑定,只是按原样显示我的模板。
答案 0 :(得分:2)
传递给template
绑定的值是该绑定的选项,而不是它们自己的单独绑定。因此,template
绑定本身不知道您的slidingIf
绑定。
您可能需要单独使用slidingIf
绑定,或者为执行动画的template
绑定编写包装。
答案 1 :(得分:1)
我试过这个,但发现我的内心&#34;绑定失败,所以我做了这个改变:
return ko.bindingHandlers['if']['update'].apply(this, Array.prototype.slice.call(arguments));