在JQueryMobile 1.0中动态加载LI

时间:2011-12-09 11:44:29

标签: jquery-mobile

我刚刚将我的项目从jquerymobile 1.0a1更新为1.0版。

我遇到动态内容问题。基于ajax搜索,我使用列表项填充无序列表。之前,以下代码刷新了列表,以便正确显示所有样式:

$('#myContent').find("ul").listview();
$('#myContent').find("ul").listview('refresh');

然而,从1.0开始,这似乎不再起作用。 列表出现但样式完全错误,所有元素的数据主题都被忽略。 有没有人遇到类似的更新问题并遇到解决方案。

5 个答案:

答案 0 :(得分:2)

  

更新列表
如果您将项目添加到列表视图,则需要在其上调用refresh()方法来更新样式并创建   添加的任何嵌套列表。例如:

$('#mylist').listview('refresh');
     

请注意,refresh()方法仅影响附加到a的新节点   名单。这是出于性能原因而完成的。已经有任何列表项   刷新过程将忽略增强功能。这意味着如果   您更改已增强列表中的内容或属性   项目,这些将不会反映出来。如果要更新列表项,   在调用refresh之前用新标记替换它。

如果#myContent是listview,你可以这样做:

$('#myContent').listview('refresh');

如果#myContent是页面,你可以这样做:

$('#myContent').trigger('create');
  

创建与刷新:重要区别
请注意,create事件和刷新方法之间存在重要差异   一些小部件有。 create事件适合增强原始   包含一个或多个小部件的标记。刷新方法应该是   用于已经被操纵的现有(已经增强的)小部件   以编程方式,需要更新UI以匹配。

     

例如,如果您有一个动态添加新页面的页面   页面创建后带有data-role = listview属性的无序列表,   在该列表的父元素上触发create会对其进行转换   进入listview风格的小部件。如果有更多的列表项   以编程方式添加,调用listview的refresh方法   将这些新列表项更新为增强状态并离开   现有的清单项目未受影响。

答案 1 :(得分:0)

您可以通过以下代码替换2行代码来实现您的目标:

 $('#myContent ul').listview('create');

希望这会有所帮助......

答案 2 :(得分:0)

我遇到过这个问题。你让事情搞得一团糟的原因是你正在多次初始化和刷新元素。我注意到我运行了两个不同的函数,它们会在同一个元素上调用.listview('refresh')。在我拿出一个主题后,数据恢复正常。你也得到任何JS错误吗?

编辑: 更具体地说,你在代码中的某个地方调用.listview() 2次,这是初始化两次。我会在你加载页面之前等待运行刷新,所以你只需要调用一次。

你可以做的另一件事是检查元素是否已经初始化,所以你不要做两次。只需检查元素或在某些情况下检查父级,以查看是否存在类ui-listview

var element = $('#myContent').find('ul');    

if ($(element).hasClass('ui-listview')) {
  //Element is already initialized
  $(element).listview('refresh');
} else {
  //Element has not been initiliazed
  $(element).listview().listview('refresh');
}

只是一个FYI,您可以将这些事件链接为$('#myContent').find('ul').listview().listview('refresh');

答案 3 :(得分:0)

可以通过。

来实现
$('#myContent').listview('refresh');

The below snippet shows you to load data from xml and dynamically create a list view.
 function loadData()
 {
    $.ajax({
    url:"BirthdayInvitations.xml",
    dataType: "xml",
    success: function(xml) 
    {
       $(xml).find("event").each(function() 
       {
       $("#mymenu").append('<li><a href='+ "#" + ' id="a" ">' + this.textContent + '  </a> </li>'); 
       });

       $("#mymenu").listview('refresh');
    }
});
}

答案 4 :(得分:0)

查看这是否与您的问题http://www.amitpatil.me/demos/jquery-mobile-twitter-app/相关,此问题也与http://www.amitpatil.me/demos/ipad-online-dictionary-app/

相关

在第一个例子中,我使用listview('refresh');方法和我正在使用的第二个例子 $(文件)。第( “破坏”)页();