所以,我一直在phonegap + jqm應用程序工作了一段時間。我一直在測試我的android手機,黑莓模擬器(os7)和黑莓設備(os5)。我的應用程序只是使用ajax調用從Web服務中獲取一些數據,並使用這些數據動態創建一些頁面,僅用於顯示該數據。爲什麼我的動態添加元素不顯示爲jqm和phonegap?
什麼有效:Ajax調用成功,數據檢索如預期。此外,jqm樣式正確應用(通過使用通常的觸發器「創建」和「刷新」)。整個應用程序在我的android設備和使用os7的bb模擬器中運行良好。
什麼不起作用:動態創建和附加的元素從不顯示,而是舊的元素(應該被刪除)停留在那裏。這僅在使用os5測試bb時纔會發生。
現在,一些代碼。在發射ajax調用時,我使用了幾個函數來完成一切。這是每個標準程序或網頁:
當從電話接收到的數據,響應被傳遞到指定的處理器,它不從響應獲取數據的工作:
function processListElements(response){
alert("processListElements Start"); // THIS IS EXECUTED
$('#anagTableList li[data-role="button"]').remove();
$(response).find('return').each(function(){
alert("inside responseFind"); // THIS IS NEVER SHOWN
var myNewLI=getFormattedLI($(this).find('codice').text(),$(this).find('responsabile').text());
$('#anagTableList').append(myNewLI).listview('refresh');
});
$('#tablePage').trigger('create');
$('#anagTableList').listview('refresh');
alert("processListElements End"); // THIS IS SHOWN!
}
正如你所看到的,新的項目與另一個funcion,其正確格式的元素創建:
function getFormattedLI(codice,responsabile){
var myFormattedLI = '<li data-role="button" data-icon="arrow-r" data-iconpos="right">'+
'<p>'+codice+' - '+responsabile+'<\/p>'+
'<\/li>';
return myFormattedLI;
}
最後,這裏是這個頁面的標記:
<div id='tablePage' data-role="page">
<div data-theme="a" data-role="header">
<h1 >Commesse Tigre</h1>
</div><!-- /header -->
<ul id='anagTableList' data-filter="true" data-theme="a" data-role="listview" data-inset="true">
<a href="#" id="advancedSearch" data-theme="c" style="color:#FF8C90;text-decoration:none">advanced search</a>
<li id='tableHeader' data-role="header">CODICE - RESPONSABILE - ANNO</li>
</ul>
<div data-theme="a" data-role="footer">
<div class="ui-grid-b">
<div class="ui-block-a"><a href="#" id="pageLeft" data-role="button" data-icon="arrow-l" data-iconpos="notext" style="margin-top:7px;">Previous page</a></div>
<div class="ui-block-b" style="text-align:center;margin-top:15px;">Page<p id='currentPage' style="display:inline">1</p> of <p style="display:inline" id='totalPages'>2</p></div>
<div class="ui-block-c"><a href="#" id="pageRight" data-role="button" data-icon="arrow-r" data-iconpos="notext" style="float: right;margin-top:7px;">Next page</a></div>
</div><!-- /footer -->
</div>
那麼,爲什麼當我更改頁面時不顯示新的列表項?難道我做錯了什麼?
任何幫助,非常感謝,我一直在努力與此一段時間,我找不到任何解決方案。此外,對不起長問題:)
編輯1:只要我已經嘗試更改我所有的jquery函數爲純JavaScript。沒有什麼改變(不是我對此寄予厚望)
編輯2:仍在掙扎着,每次都會變得陌生。我一直在做一些測試應用程序,它們的工作方式完全相同(ul會附加新的li),並且它們都工作,除了具有上述發佈代碼的應用程序,其中元素仍未顯示。
編輯3:我發現response.find函數中的所有東西都不會被執行,但代碼不會被阻塞,所以將函數放在函數內部是不會顯示的。編輯代碼以更好地解釋。
編輯4:我認爲「find」函數沒有找到任何「返回」節點是非常安全的。響應來自第2軸Web服務,並且每個返回節點都標記爲「ns:return」。這對我的android和bb7設備來說不是問題,但顯然它適用於我的bb5。將查找更改爲「ns:return」不會解決任何問題。我好累。幫幫我!
編輯5(最後):我還沒有能夠解決問題,但我確實找到了。這個問題現在被簡化爲能夠在jquery或javascript中查找帶有命名空間的節點。 SO解決這個問題有很多問題,但是直到現在,從jQuery 1開始,沒有什麼對我有用。7已經打破了所有的解決方法。
您的工作示例是否在os 5的黑莓中工作?另外,你是否肯定改變刷新順序和創建會改變什麼?我的理解是這些是針對jqm樣式的,但是無論如何,元素都應該被追加,即使這些元素都是黑白和無風格的。無論如何,我試過你的解決方案,它沒有改變任何東西:( – Th0rndike