2012-11-22 30 views
0

我有以下腳本的作品,但我不認爲這是做的一個很好的方法:我是否根據ajax請求多次啓動jQuery.masonry?

success: function(widget_shell) 
{ 

    if(widget_shell.d[0]) { 

     $("#container").empty(); 

     var i = 0; 

     for (i = 0; i <= widget_shell.d.length - 1; i++) { 

      var j = Math.floor(Math.random() * 200) + 50 

      var $widget = $("<div class='item col1' style='height:" + j + "px'></div>").appendTo($("#container")); 
      $("<span>" + widget_shell.d[i].widget_id + " - " + j + "</span>").appendTo($widget); 

     } 

     $('#container').masonry({ 
      itemSelector : '.item', 
      columnWidth: 240 
     }); 

     $('#container').masonry('reload') 

    } 

} 

我主要關注的是.masonry一部分。由於success發生很多次,即按照ajax請求,我認爲上面的代碼每次都重新啓動.masonry,然後重新加載它。

我曾嘗試之外,其中包含success上面的函數移動.masonry啓動,但似乎試圖初始化在創建.masonrydiv S,所以這是行不通的。

任何建議,或者這是一個很好的方法去解決這個問題?

回答

0

爲什麼你同意這種麻煩,如果它的工作原理?我不會。你可以使用Jquery模板插件。也許這只是DOM更快一點。在我的簽名中查看磚石建築的例子。

+0

我現在的網站在客戶端渲染速度非常慢,所以我正在儘可能地加快速度。 serverside都基於返回json數據,所以部分是快速的,但客戶端jquery沉重笨重。 – oshirowanen

+0

更新了我的答案。祝你好運! – Bytemain

0

你可以測試,不知道它的工作原理砌體插件:

if($().masonry == 'undefined') 
$('#container').masonry({ 
      itemSelector : '.item', 
      columnWidth: 240 
     }); 

$('#container').masonry('reload') 
+0

剛試過這個,它似乎停止'.masonry'完全做它的事情。 – oshirowanen