2013-03-28 89 views
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升級筆記,但沒有任何關係。

這是什麼原因導致的,我的綁定需要改變什麼?

回答

8

Uncaught Error: cannot call methods on accordion prior to initialization; attempted to call method 'destroy'

此錯誤說,你在呼喚摺疊菜單的destroy方法的初始化窗口小部件之前。

問題出在您使用setTimeOut的自定義綁定代碼。 setTimeOut中的代碼在更新函數後運行。因此,手風琴插件不會初始化您的元素,而在您正在致電destroy手風琴的更新功能中。

一個簡單的辦法是,你應該檢查手風琴插件是否已初始化元素上還是不調用任何方法,像以前一樣:

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

在這裏,您可以檢查Working jsbin

+2

有趣的是,你稱爲JS斌一個小提琴:) – 2013-11-11 17:17:26

+0

@PWKad和我改變了:D到jsbin:D – 2016-12-09 10:41:33