Ответ 1
Я столкнулся с этой проблемой с кодом, похожим на ваш. Мое решение состояло в том, чтобы поместить обновление в опцию $.ajax "complete".
complete: function() {
$('#list-id').listview('refresh');
}
Я создаю мобильное веб-приложение с jQuery Mobile, и у меня есть проблема. Я использую jQuery для анализа XML файла и создания элементов списка. Он создает список, затем добавляет этот список <li>
к <ul>
на странице. Я прочитал, что для правильного написания списка вы должны вызвать .listview('refresh')
после добавления данных для обновления списка, чтобы jQuery Mobile мог установить правильный стиль в список.
Моя проблема в том, что список никогда не обновляется. Он продолжает ошибочно оформляться. Я делаю что-то неправильно? Правильно ли мой код? FYI, я пробовал всевозможные варианты .listview()
, .listview('refresh')
и т.д.
CODE:
<script type="text/javascript">
$(window).load(function() {
$.ajax({
type: "GET",
url: "podcast.xml",
dataType: "xml",
async: false,
success: parseXml
});
});
function parseXml(xml) {
var podcastList = "";
$(xml).find("item").each(function() {
podcastList += "<li class='ui-li-has-thumb ui-btn ui-btn-icon-right ui-li ui-btn-up-c' role='option' data-theme='c'><img src='" + $(this).find("itunes\\:image").attr("href") + "' class='ui-li-thumb'><h3 class='ui-li-heading'><a href='" + $(this).find("enclosure").attr("url") + "' class='ui-link-inherit'>" + $(this).find("title").text() + "</a></h3><p class='ui-li-desc'>" + $(this).find("itunes\\:subtitle").text() + "</p></li>";
});
$("#podcastList").append(podcastList);
$("#podcastList").listview('refresh');
}
</script>
Спасибо!
Я столкнулся с этой проблемой с кодом, похожим на ваш. Мое решение состояло в том, чтобы поместить обновление в опцию $.ajax "complete".
complete: function() {
$('#list-id').listview('refresh');
}
Мое решение состояло в том, чтобы не использовать никаких параметров в методе listview, как в
<div data-role="page" id="playlist">
<div data-role="header">
<h1>my playlist</h1>
<a href="index.html" data-icon="arrow-l">Back</a>
</div>
<div data-role="content"></div>
</div>
end then..
$('#playlist').bind('pageshow', function () {
doOnCallBack = function(){
$('#playlist').find('[data-role="listview"]').listview();
}
ajaxGet('${genSecureLink(action:'updatePlaylistTemplate',controller:'ajaxActionsPd',absolute:'true')}',$('#playlist').find('[data-role="content"]'),doOnCallBack);
});
вот моя функция ajaxGet:
function ajaxGet(url,target,doOnCallBack){
$.ajax({
url: url,
error:function(x,e){handleAjaxError(x,e);},
beforeSend:function(){$.mobile.showPageLoadingMsg();},
complete:function(){$.mobile.hidePageLoadingMsg();doOnCallBack();},
success:function(data, textStatus, jqXHR){target.html(data);}
});
}
Ответ на спайк работал у меня - я нацелился на родительский div ul. Мне также необходимо связать функцию ajax с pagecreate - это:
<div data-role="page" data-theme="b" id="my-page">
<div data-role="header">
<h1>Podcast List</h1>
</div>
<div data-role="content">
<ul id="podcastList" data-role="listview">
</ul>
</div>
</div>
<script>
$('#mypage').bind('pagecreate',function(){
// instead of $(window).load(function(){
$.ajax({
type: "GET",
url: "podcast.xml",
dataType: "xml",
async: false,
success: parseXml
complete: function() {
$('#podcastList').listview('refresh');
}
});
});
</script>
$("#podcastList").trigger("create");
Ваш код выглядит хорошо для меня... Похоже на то, что у меня в моем приложении.
Возможно, проблема кроется в вашем HTML? Он должен выглядеть примерно так:
<div data-role="page" data-theme="b" id="my-page">
<div data-role="header">
<h1>Podcast List</h1>
</div>
<div data-role="content">
<ul id="podcastList" data-role="listview">
</ul>
</div>
</div>