2016-07-06 33 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