1

所以,我一直在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已經打破了所有的解決方法。

回答

0

我終於解決了這個問題。在XML響應中的每一個回報是這樣的:

 <ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:CommessaBase"> 
     <ax21:codice>CODICE0</ax21:codice> 
     <ax21:responsabile>PERSON0</ax21:responsabile> 
    </ns:return> 

所以,上面的代碼,它在尋找回報,沒發現什麼。我嘗試了幾件事,最終,這個工作的功能是這樣的:

 function processListElements(response){ 

    $('#anagTableList li[data-role="button"]').remove(); 
    $('#anagTableList').listview('refresh'); 

    $(response).find('*').filter('ns\\:return').each(function(){ 

     var myNewLI=getFormattedLI($(this).find('*').filter('ax21\\:codice').text(),$(this).find('*').filter('ax21\\:responsabile').text()); 
     $('#anagTableList').append(myNewLI); 
     $('#anagTableList').listview('refresh'); 

    }); 

} 
0

您好我有一個工作樣本即時通訊我的東西,我在一個字符串創建所有的HTML列表元素(LI)(這裏假設arrLI是li元素字符串數組):

$('#mylist').append(arrLI.join("")); 
$('#mylist').listview('refresh'); 
$('#mylist').trigger('create'); 

和刪除刷新每個元素

+0

您的工作示例是否在os 5的黑莓中工作?另外,你是否肯定改變刷新順序和創建會改變什麼?我的理解是這些是針對jqm樣式的,但是無論如何,元素都應該被追加,即使這些元素都是黑白和無風格的。無論如何,我試過你的解決方案,它沒有改變任何東西:( – Th0rndike

相關問題