2012-07-17 96 views
2

我目前正在通過Knockout創建自定義綁定的文檔,並且我可以理解這個概念,但我在實踐中遇到了麻煩。KnockoutJS:包裝自定義綁定中的if綁定

具體而言,我想提供一個slideUp/slideDown jQuery動畫到if綁定。然而,我只是讓KO「看到」我的自定義綁定有麻煩。關於擴展綁定的正確方向的一點將不勝感激。

其他注意事項:

我現在用的是KO外部模板引擎從here,就像這樣:

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

,我創建了一個非常基本的自定義綁定環繞「如果」默認:

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

傳遞給template綁定的值是該綁定的選項,實際上並不是它們自己單獨的綁定。所以,template綁定本身並不知道你的綁定。

你可能需要自己使用你的slidingIf綁定,或者寫一個包裝到你的動畫的template綁定。

+0

感謝。我會嘗試尋找另一種方法,一旦我解決了這個問題,就會考慮到這一點。 – 2012-07-19 04:27:42

1

我想這一點,卻發現我的「內」綁定失敗了,所以我做了這個變化:

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