當創建一個knockout custom binding包含對淘汰賽默認調用綁定時失敗,我的自定義綁定站第一個呼叫後工作。
要查看問題,請在JSFiddle example中更改ddl中的所選項目一次。文本如預期改變。再次改變它,沒有任何反應。失敗。
詳細
延長默認淘汰賽結合「html」我自己的自定義綁定「htmlFade」當我看到一些奇怪的行爲。我正在尋找的行爲與html binding相同,但使用JQuery淡入淡出動畫來淡入DOM元素。
下面的代碼示例。完整的JSFiddle示例可以參見here。
的HTML看起來像這樣:
<select data-bind="options: names, value: selectedName"></select>
<data-bind="htmlFade : selectedName" class="main"></div>
JSON數據是這樣的:
var viewModel = {
names: ko.observableArray(['Bob', 'Jon']),
selectedName: ko.observable('Bob')
};
自定義綁定看起來像這樣:
ko.bindingHandlers.htmlFade = {
init: function(element, valueAccessor) {
ko.bindingHandlers.html.init();
$(element).hide();
},
update: function(element, valueAccessor) {
$(element).fadeOut(700, function() {
ko.bindingHandlers.html.update(element, valueAccessor);
$(element).fadeIn(700);
});
}
};
我有意延遲到默認的HTML處理程序的行「ko.bindingHandlers.html.update(element,valueAc cessor)「,因爲我的目標是擴展的行爲,而不是重新創建。
問題我在做的是上面的代碼在第一次選擇列表被更改時工作。之後它失敗了。
我創建另一個JSFiddle example其中,代替延伸的行爲,我通過添加下列行「http://jsfiddle.net/jamshall/kYwEE/1/」重新創建它代替(從knockout source for the default html binding複製)上面引用html.update調用。這似乎工作正常。
我的問題,那麼,是爲什麼第一個電話後,我的工作自定義綁定站時,我包括爲默認從withing它綁定一個電話?或者,爲了簡單起見,爲什麼JSFiddle1無效,但JSFiddle2有效?
感謝所有幫助