我正在尝试使用jquery.mobile在第二页上呈现列表视图。
我正在使用带有多个“页面”的单个HTML。
<div data-role="page" id="foo">
<a href="#bar" data-role="button" data-inline="true" id="loadList)">List</a>
</div>
<div data-role="page" id="bar">
<div id="ListDiv">
<ul id="listview" data-role="listview" data-inset="true">
</ul>
</div>
</div>
<!--application UI goes here-->
<script type="text/javascript">
$("#loadList").click(function(){
$.getJSON(
"http://localhost/index.php/api/list",{format: "json"},
function(data){
var output = '';
$.each(data, function(key, val) {
output += '<li><a href="#">' + val +'</a></li>';
});
$('#listview').append(output).listview('refresh');
});
});
但现在的问题是,当我点击#loadList按钮时,它确实需要我到#bar页面,但是,它似乎不是$(“#loadList”)。click()被执行,因为列表没有显示在#bar页面上。即,没有任何内容被附加到#listView。
有什么想法吗?
答案 0 :(得分:2)
首先,此代码存在问题, $.getJSON
加载逻辑为false。使用 $.getJSON
时,无法同时使用更改页面。
有两种方法可以使这项工作:
删除onclick事件并在第二页初始化期间加载数据:
$(document).on('pagebeforeshow', '#bar', function(){
$.getJSON(
"http://localhost/index.php/api/list",{format: "json"},
function(data){
var output = '';
$.each(data, function(key, val) {
output += '<li><a href="#">' + val +'</a></li>';
});
$('#listview').append(output).listview('refresh');
});
});
});
不幸的是这个解决方案存在问题。使用过的页面事件不会等待 $.getJSON
,所以在某些情况下,当页面加载和内容突然出现时,列表视图将为空。所以这个解决方案并不是那么好。
第二个解决方案是从按钮中删除 href="#bar"
属性,但保留点击事件。 $.getJSON
操作成功后,使用 changePage
功能并加载下一页。如果访问第二页listview存在问题,请存储结果(在 ARTICLE 中,您会找到或 HERE )并附加在 pagebeforeshow
页面的 #ba
事件期间再次发生。
我让你成功了 jsFiddle
示例:http://jsfiddle.net/Gajotres/GnB3t/
HTML:
<!DOCTYPE html>
<html>
<head>
<title>jQM Complex Demo</title>
<meta name="viewport" content="width=device-width"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
</head>
<body>
<div data-role="page" id="index">
<div data-theme="a" data-role="header">
<h3>
First Page
</h3>
</div>
<div data-role="content">
<a href="#" data-role="button" id="populate-button">Load JSON data</a>
</div>
</div>
<div data-role="page" id="second">
<div data-theme="a" data-role="header">
<h3>
Second Page
</h3>
<a href="#index" class="ui-btn-left">Back</a>
</div>
<div data-role="content">
<h2>Simple list</h2>
<ul data-role="listview" data-inset="true" id="movie-data" data-theme="a">
</ul>
</div>
<div data-theme="a" data-role="footer" data-position="fixed">
</div>
</div>
</body>
</html>
JS:
$(document).on('pagebeforeshow', '#index', function(){
$('#populate-button').on('click',function(e,data){
$.ajax({url: "http://api.themoviedb.org/2.1/Movie.search/en/json/23afca60ebf72f8d88cdcae2c4f31866/The Goonies",
dataType: "jsonp",
jsonpCallback: 'successCallback',
async: true,
beforeSend: function() {
$.mobile.showPageLoadingMsg(true);
},
complete: function() {
$.mobile.hidePageLoadingMsg();
},
success: function (result) {
ajax.jsonResult = result;
$.mobile.changePage("#second");
},
error: function (request,error) {
alert('Network error has occurred please try again!');
}
});
});
});
$(document).on('pagebeforeshow', '#second', function(){
ajax.parseJSONP(ajax.jsonResult);
});
var ajax = {
jsonResult : null,
parseJSONP:function(result){
$('#movie-data').empty();
$('#movie-data').append('<li>Movie name:<span> ' + result[0].original_name+ '</span></li>');
$('#movie-data').append('<li>Popularity:<span> ' + result[0].popularity + '</span></li>');
$('#movie-data').append('<li>Rating:<span> ' + result[0].rating+ '</span></li>');
$('#movie-data').append('<li>Overview:<span> ' + result[0].overview+ '</span></li>');
$('#movie-data').append('<li>Released:<span> ' + result[0].released+ '</span></li>');
$('#movie-data').listview('refresh');
}
}
答案 1 :(得分:0)
你有id =“loadList)”,也就是说,
中有一个右括号<a href="#bar" data-role="button" data-inline="true" id="loadList)">List</a>
也许这会导致你的问题?