使用移动版jquery和cordova时,可折叠列表视图的头部不能刷新
header of collapsible listview not refreshing using jquery mobile and cordova
我正在使用Cordova和JQuery Mobile 1.4.3构建一个应用程序,它从web服务中提取数据。一旦cordova加载并更新DOM,我就不会遇到获取数据的问题。
数据显示在一个可折叠的列表中,每个标题和视图根据从web服务返回的数据更新。
但是,一旦DOM更新完成,可折叠标题不会刷新其样式,而内容会刷新。此外,标题也是可点击的。
我已经在网上搜索了一个解决方案,但无法找到一种方法来获得可折叠的标题来刷新他们的视图。
我试过使用$("#id").collapsible('refresh')
,但无济于事。
任何关于如何更新UI的帮助将是伟大的
下面的代码。
index.html的头脚本
<script type="text/javascript">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
init();
}
</script>
标记片段
<div data-role="page" id="home" data-title="Home">
<div data-role="header" data-id="foo" data-position="fixed">
<h1>Title</h1>
<a href="#menu" data-icon="bars" data-iconpos="notext" data-transition="slide" data-corners="false" data-shadow="false" class="ui-btn-right"></a>
</div>
<div data-role="content" id="collapsible_set">
<h3 id="date"></h3>
<div data-role="collapsibleset" id="datacollapsible" data-inset="false">
<!-- First Collapsible -->
<div data-role="collapsible" id="test" class="content">
<h3 class="title"></h3>
<ul data-role="listview" data-inset="false">
<li style="font-size: 1.4em;">
<p class="description" style="overflow: visible; text-overflow: clip; white-space: normal"></p>
<p>Source:</p>
<p><a href="" target="_blank" class="source"></a></p>
<div data-role="controlgroup">
<a href="#" data-role="button" data-icon="star">Add to Favorites</a>
<a href="#" data-role="button">Share</a>
</div>
</li>
</ul>
</div>
<!-- More Collapsibles below -->
</div>
</div>
JS
var data;
var pattern = new RegExp('^http');
function init() {
initializeDataSet();
insertData();
$("#test").collapsible('refresh');
}
function insertData() {
// set date
var date = new Date();
var options = {
weekday: "long", year: "numeric", month: "long", day: "numeric"};
var outputDate = date.toLocaleString("en-us", options);
$("#date").html("" + outputDate);
// Get content elements and add data
var content = $('.content');
if (content) {
for (var i = 0; i < content.length; i++) {
var temp = content[i];
temp.getElementsByTagName('h3')[0].innerHTML = data[i]['title'];
if(data[i]['word']){
temp.getElementsByTagName('p')[0].innerHTML = data[i]['word'] + ": " + data[i]['description'];
} else {
temp.getElementsByTagName('p')[0].innerHTML = data[i]['description'];
}
if(pattern.test(data[i]['source'])) {
temp.getElementsByTagName('a')[0].setAttribute("href", data[i]['source']);
temp.getElementsByTagName('a')[0].setAttribute("target", "_blank");
} else {
temp.getElementsByTagName('a')[0].removeAttribute("href");
temp.getElementsByTagName('a')[0].removeAttribute("target");
}
temp.getElementsByTagName('a')[0].innerHTML = data[i]['source'];
}
}
}
/**
* initialise the dataset to a global variable when the app launches.
* @returns {undefined}
*/
function initializeDataSet() {
// make request to get data
var request = createRequest();
if (request === null) {
alert("Error, can't get data");
return;
}
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
data = JSON.parse(request.responseText);
}
}
};
var params = "date=" + createDate();
request.open("POST", "URL FROM WHERE I AM GETTING DATA", false);
//Send the proper header information along with the request
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(params);
}
function createDate() {
var date = new Date();
var day = date.getDate();
if (day < 10) {
day = "0" + day.toString();
}
var month = date.getMonth() + 1;
if (month < 10) {
month = "0" + month.toString();
}
return date.getFullYear() + "-" + month + "-" + day;
}
首先,您需要了解jQM如何增强其小部件,例如可折叠。可折叠的初始HTML标记在小部件创建后不会保持原样。
<div data-role="collapsible">
<h3>Header</h3>
<p>Contents</p>
</div>
将上面的HTML标记转换为以下内容:
<div data-role="collapsible" class="ui-collapsible ui-collapsible-themed-content">
<!-- Header -->
<h3 class="ui-collapsible-heading">
<a href="#" class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-btn-inherit ui-icon-minus">
Header
</a>
</h3>
<!-- Contents -->
<div class="ui-collapsible-content ui-body-inherit" aria-hidden="false">
<p>Contents</p>
</div>
</div>
你没有正确更新可折叠的header/content,你需要瞄准内部元素。下面是一个例子:
Edit:我忘了说你不需要调用refresh方法,因为你没有替换可折叠的任何部分。
var data = [{
"title": "foo1",
"content": "foo1 content"
}, {
"title": "foo2",
"content": "foo2 content"
}];
$.each(data, function (i, value) {
$("#datacollapsible .ui-collapsible:eq(" + i + ")")
.find("h3 a")
.text(value.title)
.end()
.find(".ui-collapsible-content p")
.text(value.content);
});
相关文章:
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 如何将参数从列表视图中的项传递到模板
- 根据手机上是否存在文件,在jQuery mobile中动态填充列表视图
- 如何在我传递给视图的ViewModel集合中获得jQuery可选对象的值,以作为有序列表进行迭代
- 取消选择滚动启动时的所有列表视图项目
- 使用PhoneGap和jQuery Mobile在android设备上显示动态列表视图
- 通过格式化将jquery移动组件动态添加到列表视图中
- 如何让li项目在这个jQuery列表中滑动和/或淡出视图
- jqmobile列表视图中元素之间的间距相等
- 如何在Vue.js中使用列表视图
- jQuery移动列表视图和面板
- 剑道移动列表视图更改过滤器onclick
- 无法将对象列表从视图模型设置为 javascript 变量
- Metro 应用程序中的列表视图项目单击
- 列表视图在Android上滚动断断续续且缓慢
- 带有砖石结构的轴网视图/列表视图
- 在不涉及控制器的情况下对MVC视图列表中的项进行排序
- 网格视图列表视图切换
- 推送到数组不会通过ng repeat指令更新视图列表
- Javascript / jquery在两个树视图列表之间拖放