2012-07-24 29 views
2

我遇到了一些我認爲不應該發生的事情(基於互聯網上的其他評論)。jQuery石工初始化後續調用失敗

基本上我第一次調用masonry()的佈局是好的。但如果我重新發布新的html內容(對於砌體容器),然後再次通過masonry()初始化它,那麼佈局被破壞(只是網格佈局,但不填充項目之間的所有空間)。

在IE8上,我實際上通過調試器得到了一個jquery.masonry錯誤。

  • 我在做一些根本性的錯誤?
  • 有沒有更好的方法來做到這一點?

    var $container = $('#container'); 
    
    // emit photos. 
    $container.html(content.join('')); 
    
    // initiate masonry. 
    $container.imagesLoaded(function() { 
        $container.masonry({ // <<------------ this is where is crashed on subsequent attempts. 
          itemSelector: '.item', 
          isAnimated: true, 
          isFitWidth: true 
         });    
    }); 
    

*更新*

我現在能得到後續的磚石init的工作(磚石佈局工作)。 要做到這一點,我簡單地調用.masonry('destroy'),然後發送新的html內容到砌體容器。不知道爲什麼這使得它的工作似乎沒有人做到這一點。

+0

你有jsfiddle嗎? – 2012-07-24 14:23:12

+0

不,我不知道如何使用jsfiddle。 – AlvinfromDiaspar 2012-07-24 14:59:36

回答

3

如果您只是更換容器的內容,而不是容器本身,則必須在再次啓動容器之前調用.masonry('destroy')

+0

對不起,我剛剛閱讀您的更新,並看到你已經明白了這一點。如果你願意,你可以添加一個答案;它完全可以接受你自己的問題。 – lbstr 2012-07-24 15:02:56

+0

感謝您的確認。這應該記錄在某處imho。 – AlvinfromDiaspar 2012-07-24 15:07:42

+1

@AlvinfromDiaspar你會遇到很多,因爲插件通常會使用'.data()'或者通過在某個對象中保存對容器的引用來將一些信息綁定到容器。您需要在重新初始化之前清除該信息。 – lbstr 2012-07-24 16:27:39