2016-07-06 52 views
2

我在其他頁面發現了這個問題和解決方案,但我仍然無法獲得完美的一個。我正在循環200個對象的數組。Jquery mobile(ListView)觸發器試圖插入大量行時創建緩慢

var stringBuffer = []; 
for(var i = 0; i < array; i++) { 
    stringBuffer.push('<input type="radio" class="select_options" data-iconpos="right" onClick ="callClosePopup(event);" name="items" id="radio_' + array[i].ConditionId + '" ' + checked + 'value="' + array[i].ConditionId+'_' + array[i].Description + '"/><label data-corners="false" data-iconshadow="false" style="border-bottom:1px solid rgb(0,0,0)" for="radio_' + array[i].ConditionId + '">' + array[i].Description + '</label>');  
} 
var combinedHtml = stringBuffer.join("") 
$("#myListView").html(combinedHtml).trigger("create"); <=== This line consumes a lot of time (around 9 seconds on my Moto G). 

任何想法,以改善這一點? PS:我正在使用jQuerymobile v-1.3.1。

回答

0

我還沒有嘗試過這個,但它可能是一個粗略的解決方案。我正在爲我的項目尋找更優雅的東西。

<div id="test"></div> 

JS:

這是由zupkoo

https://forum.jquery.com/topic/listview-trigger-create-performance-issue-jqm-enhancement#14737000003990247

HTML提供

$.mobile.showPageLoadingMsg(); 
var s = ""; 
var OF; 
OF = $("#test"); 
OF.append(s); 
OF.trigger("create"); 
for(var i =0;i<350;i++){ 
    s+="<form>"; 
    s+="<input type=\"checkbox\" id=\"checkbox-"+i+"\" />"; 
    s+="<label for=\"checkbox-"+i+"\">"+i+"</label>"; 
    s+="</form>"; 
} 
var srcLength = 1000; 
var srcNumb = 1000; 
var startSrc = 0; 
var ss =""; 
var inter=self.setInterval(function(){ 
    if(s.length <= (startSrc+srcLength)){ 
     ss=s.substr(startSrc); 
     OF.append(ss); 
     OF.trigger("create"); 
     clearInterval(inter);$.mobile.hidePageLoadingMsg(); 
    }else{ 
     ss = s.substr((startSrc),srcLength); 
     var index = ss.indexOf("</form>",(srcLength-200)); 
     srcNumb=index+7;//</form> = 7 
     startSrc+=srcNumb; 
     OF.append(ss.substr(0,srcNumb)); 
     OF.trigger("create"); 
    } 
},0); 
+0

對我來說,最終的解決方案,這加速了我的應用程序有很多,是爲了消除使用這麼多元素。它在$ .create()上,jQuery花了很多時間來生成它的修改和處理程序。 – shmolf