所以,我已经在phonegap + jqm应用程序上工作了一段时间。我一直在测试我的Android手机,黑莓模拟器(os7)和黑莓设备(os5)。我的应用程序只是使用ajax调用从Web服务获取一些数据,并使用数据动态创建一些页面,其唯一目的是显示该数据。
什么有用: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!
}
正如您所看到的,新项目是使用另一个函数创建的,它可以正确地格式化元素:
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:我认为说“查找”功能没有找到任何“返回”节点是非常安全的。响应来自axis 2 Web服务,每个返回节点都标记为“ns:return”。这对我的android和bb7设备来说不是问题,但显然它适用于我的bb5。将find更改为“ns:return”不会解决任何问题。我好累。救命啊!
编辑5(最后):我无法解决问题,但我确实找到了。问题现在减少到能够在jquery或javascript中找到具有命名空间的节点。 SO解决这个问题有很多问题,但到目前为止我没有任何问题,因为jQuery 1.7打破了所有的解决方法。
答案 0 :(得分:0)
嗨我有一个工作样本我的东西,我在一个字符串中创建所有HTML列表元素(li)(假设这里arrLI是一个li元素字符串数组):
$('#mylist').append(arrLI.join(""));
$('#mylist').listview('refresh');
$('#mylist').trigger('create');
并删除每个元素的刷新
答案 1 :(得分: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');
});
}