使用 Phonegap 和 Kendo Mobile UI,我的应用程序从通过 phonegap 中的 openDatabase() 访问的 SQL 数据库动态填充几个不同的列表视图。当我第一次启动应用程序并单击几个不同的列表时,应用程序会非常快速地导航和填充视图。在浏览屏幕超过 15-20 次后,整个应用程序开始变慢,并最终爬到难以使用的地步。
在 iPhone4 - 5 或模拟器上运行并没有什么不同。
重新启动应用程序我看到了第一个列表视图。检查 web 视图并查看文件列表,我可以看到 index.html。在普通文件夹下:Scripts、Images、Fonts 等。
单击一个列表项会进入另一个列表视图。一旦页面更改并填充了新的列表视图,我现在注意到 index.html 父项下有一个新文件夹。一个名为:“Extra Scripts”的文件夹 在 Extra Scripts 文件夹中,我找到了一个新的 index.html 文件(没有子文件)。单击它会打开其内容,1 行:
cordova.require('cordova/exec').nativeFetchMessages()
单击另一个项目可以通过再次更改视图并填充另一个列表视图来进一步深入。现在在第三个屏幕上,我注意到 Extra Scripts 文件夹中有 2 个 index.html 文件。
简而言之:每当显示这些带有列表的视图时,都会将一个新文件附加到 Extra Scripts。一旦这些文件的数量超过 12 个左右,设备就会变慢。我的应用程序中确实有其他视图不包含动态填充的列表视图,这些页面不会导致创建额外脚本。
我不确定 Kendo Mobile ListViews 或 Phonegap 2.4 本身是否存在问题。我还将 Phonegap 升级到 2.9,但没有帮助。我还有另一个运行相同版本(2.4)的应用程序,它没有遇到任何这些问题,虽然它并不专注于列表视图,但存在多个列表视图并且没有出现问题。
这两个应用程序之间的另一个重大区别是,损坏的应用程序从 phonegaps WebSQL 数据库插件填充数据,而工作的应用程序从联系 REST 服务的 ajax 调用中提取数据。
下面是我如何创建和初始化列表视图的示例
<div data-role="view" id="equipmentPage" data-title="My Network" data-layout="mobile-tabstrip" >
<ul data-role="listview" class="equipmentlist" data-source="equipmentDS" data-template="equipmentListItemTemplate">
</ul>
</div>
<script type="text/x-kendo-template" id="equipmentListItemTemplate">
<div class="left wide liname">${name}</div>
<div class="hiddenField" style='display: none'>${id}</div>
<div class="right">
<div class="hiddenField" style='display: none'>${id}</div>
<div class="km-button badgeButton" id="badgeequipment_#=id#"></div>
<button class="editEquipment" style="vertical-align: top" data-role="button" data-icon="compose"> </button>
</div>
</script>
function equipmentliTemplateInit(){
lockOverlay = true
showLoadOverlay()
console.log("equipmentInit")
dbSelect("Select * from Equipment WHERE active = 1 and userId = " + ((temp.selected.friend > 0)?temp.selected.friend:temp.user.userID) + " AND siteId = " + temp.selected.site + "", function(tx, results){
var equipment = new Array();
for(var i = 0; i < results.rows.length; i++)
{
equipment.push(results.rows.item(i))
}
fillEquipment(equipment)
lockOverlay =false
hideLoadOverlay()
})
}
function fillEquipment(equipment)
{
equipment.sort(function(a, b){
var nameA = a.name.toLowerCase();
var nameB = b.name.toLowerCase();
if(nameA < nameB)
return -1
if(nameA > nameB)
return 1
return 0;
})
/*$(".equipmentlist").data('kendoMobileListView').destroy()
$(".equipmentlist").html("");
$(".equipmentlist").kendoMobileListView({
dataSource: kendo.data.DataSource.create({data: equipment }),
template: $("#equipmentListItemTemplate").html()
});*/
equipmentDS.data(equipment)
setBadges()
if(equipment.length < 1)
$(".equipmentlist").html("<li><center>There are no equipment to display.<br>Use the + button to add one.</center></li>");
defineListItemActions()
}
我尝试上传图片,但新用户无法上传。