以下绑定在 1.9 之前有效:
ko.bindingHandlers.accordion = {
init: function(element, valueAccessor) {
var options = valueAccessor() || {};
setTimeout(function() {
$(element).accordion(options);
}, 0);
ko.utils.domNodeDisposal.addDisposeCallback(element, function(){
$(element).accordion("destroy");
});
},
update: function(element, valueAccessor) {
var options = valueAccessor() || {};
$(element).accordion("destroy").accordion(options);
}
}
但从1.9开始,它不再起作用,并给出以下错误:
Uncaught Error: cannot call methods on accordion prior to initialization; attempted to call method 'destroy'
我很难弄清楚为什么。我查看了 jQuery UI 升级说明,但似乎没有什么相关的。
造成这种情况的原因是什么?我的绑定需要更改什么?
未捕获的错误:在初始化之前无法调用折叠面板上的方法;尝试调用方法“destroy”
此错误表明您正在调用destroy
在初始化小部件之前,手风琴小部件的方法。
问题在于您使用的自定义绑定代码setTimeOut
。 setTimeOut 中的代码在更新函数之后运行。因此,手风琴插件未在您的元素上初始化,并且在您调用的更新函数中destroy
手风琴的方法。
一个简单的替代方法是,您应该在调用任何方法之前检查 Accordion 插件是否已在元素上初始化,例如:
if(typeof $(element).data("ui-accordion") != "undefined"){
$(element).accordion("destroy").accordion(options);
}
在这里你可以检查工作中的jsbin http://jsbin.com/ijibef/1/edit.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)