我有一个动态插入DOM的JQM页面,每次都必须重新生成,因为数据可能会发生变化。第一次显示页面时,一切正常,但如果用户稍后返回此页面,则会出现以下渲染问题。这是关闭的列表:
以下是第二次观看屏幕时打开的列表:
我尝试了$(id-selector).trigger('create')
,.remove()
和.empty()
的各种组合,但到目前为止没有任何内容使得该页面第二次像第一次那样工作。
对于它的价值,因为这似乎是我正在寻求解决方法的JQM的问题,这里是构建此列表的代码:
var url_base_key = resource.url + '_base';
html += '<div data-role="collapsible-set" data-inset="false" id="per-back-issues">';
if (window.per_info.back_issues.length > 0){
html += '<br /><p><b>' + Label('label_back_issues') + '</b></p>';
for (var i = 0; i < window.per_info.back_issues.length; i++){
var group = window.per_info.back_issues[i];
if (group.issues.length > 0){
html += '<div data-role="collapsible" class="per_group" id="per-group-' + group.group + '"><h2 id="group-label-' + group.group + '">' + group.group + '</h2><ul data-role="listview">';
for(var j = 0; j < group.issues.length; j++){
var issue = group.issues[j];
var url_base = window.orgbase_api[url_base_key];
var url = url_base + issue.formats[0].file;
var id = resource.orgbaseapi_url + '-' + issue.year + '-' + issue.month + '-lit_menu_item';
var item = '<li class="per_item">' + GetPdfLink(resource.id, id, url, GetLongMonth('gregorian', issue.month)) + '</li>'
html += item;
}
html += '</ul></div>';
}
}
}
html += '</div>';
此内容包含在JQM页面容器
中<div id="newsletter" data-role="page" data-theme="b" data-content-theme="b">
<div data-role="header">
<a href="#" data-rel="back" data-role="button" data-icon="back" data-mini="true" class="ui-btn-left" data-iconpos="notext" data-direction="reverse" data-transition="slide">Back</a>
<h1>Newsletter</h1>
<a href="#home" data-role="button" data-icon="home" data-mini="true" class="ui-btn-right" data-iconpos="notext" data-direction="reverse" data-transition="slide">Home</a>
</div>
...
</div>
并且每次都使用
添加到DOM中var new_screen = $(html);
new_screen.appendTo($.mobile.pageContainer);
如果我尝试在appendTo()之前执行$('#newsletter)。remove(),则appendTo()不起作用。我无法使用展开事件强制列表重绘自身,因为事件在扩展发生之前触发。
答案 0 :(得分:0)
好的,问题似乎是对同一个id多次使用new_screen.appendTo($.mobile.pageContainer)
。我曾尝试使用$('#' + id).empty().remove()
删除它,如果它已经存在于appendTo()
之前,但我无法再添加它(也许有人可以帮助我理解为什么我不能这样做)。所以我尝试只更新容器,如果它已经存在并修复了问题。我想了解多次添加项目是如何导致我得到的结果。
if ($('#' + id).length > 0){
var html = script + body;
//update existing page container
$(id).html(html);
} else {
var html = '<div id="' + id + '" data-role="page" data-url="' + id
+ '" data-theme="' + theme + '" data-content-theme="' + theme + '" class="screen_section">'
+ script + body + '</div>';
var new_screen = $(html);
//add new page container to DOM
new_screen.appendTo($.mobile.pageContainer);
}