3

以下绑定在 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 升级说明,但似乎没有什么相关的。

是什么导致了这种情况,我的绑定需要改变什么?

4

1 回答 1

8

未捕获的错误:无法在初始化之前调用手风琴上的方法;试图调用方法“销毁”

此错误表示您destroy在初始化小部件之前正在调用手风琴小部件的方法。

问题在于您使用的自定义绑定代码setTimeOut。setTimeOut 中的代码在您的更新函数之后运行。所以手风琴插件没有在你的元素上初始化,在你的更新函数中你正在调用destroy手风琴的方法。

一个简单的替代方法是在调用任何方法之前检查手风琴插件是否在元素上初始化,例如:

if(typeof $(element).data("ui-accordion") != "undefined"){
 $(element).accordion("destroy").accordion(options);
}

在这里你可以检查Working jsbin

于 2013-03-28T03:50:13.953 回答