概述
创建包含对淘汰赛默认绑定的调用的淘汰赛自定义绑定时,我的自定义绑定在第一次调用后停止工作 。
要查看问题,请在JSFiddle 示例中更改 ddl 中的选定项目一次。文本按预期更改。再次更改它,没有任何反应。失败。
细节
在使用我自己的自定义绑定“htmlFade”扩展默认的淘汰赛绑定“ html ”时,我看到了一些奇怪的行为。我正在寻找的行为与html binding相同,但使用 JQuery 淡入淡出动画来淡入和淡出 DOM 元素。
下面的代码示例。可以在此处查看完整的 JSFiddle 示例。
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);
});
}
};
我故意使用"ko.bindingHandlers.html.update(element, valueAccessor)"行推迟到默认的 html 处理程序,因为我的目标是扩展行为,而不是重新创建。
我遇到的问题是上面的代码在第一次更改选择列表时起作用。之后它失败了。
我创建了另一个JSFiddle 示例,我没有扩展行为,而是通过添加以下行“http://jsfiddle.net/jamshall/kYwEE/1/” (从默认 html 绑定的淘汰源复制)重新创建它以上引用的html.update调用。这似乎工作正常。
那么,我的问题是,当我包含对默认绑定的调用时,为什么我的自定义绑定在第一次调用后停止工作?或者,为了简单起见,为什么JSFiddle1不起作用但JSFiddle2起作用?
谢谢你的帮助