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()
別のアイテムをクリックすると、ビューが再度変更され、別のリスト ビューが取り込まれ、さらにドリルダウンされます。この 3 番目の画面で、Extra Scripts フォルダーに 2 つの index.html ファイルがあることに気付きました。
要するに、リストを含むこれらのビューが表示されるたびに、新しいファイルが Extra Scripts に添付されます。これらのファイルの数が 12 程度を超えると、デバイスの速度が低下します。私のアプリケーションには、動的に入力されたリスト ビューを含まない他のビューがあります。これらのページでは、追加スクリプトが作成されません。
問題が Kendo Mobile ListViews または Phonegap 2.4 自体に存在するかどうかはわかりません。また、Phonegap を 2.9 にアップグレードしましたが、役に立ちませんでした。同じバージョン(2.4)を実行している別のアプリケーションもあり、これらの問題は発生しませんが、リストビューに集中していませんが、いくつかのリストビューが存在し、問題は発生しません。
2 つのアプリのもう 1 つの大きな違いは、壊れたアプリが 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()
}
画像をアップロードしようとしましたが、新規ユーザーはアップロードできません。