【问题标题】:trouble styling dynamically created jquery mobile listview麻烦样式动态创建jquery mobile listview
【发布时间】:2013-07-18 18:38:29
【问题描述】:

我正在尝试通过从 TMDb 下拉电影数据并构造每个 <li> 并将其附加到已经存在的 <ul> 元素来动态生成 jQuery 移动列表视图。麻烦的是,无论我做什么,我都无法正确获取它的格式。我从 TMDb 获取数据和所有内容都很好,但是当我调用 $("#ul").listview("refresh"); 时,列表视图本身并没有设置样式,这是我的一些代码(相关内容):

AJAX CALL THAT GRABS DATA AND BUILDS EACH <li>:

    $.ajax({
        type: "POST",
        data: {
            action: 'searchFilm',
            film: film
        },
        dataType: "json",
        url: "./php/functions.php",
        success: function(json) {
            console.log(json);
            for(var i = 0;  i < Object.size(json); i++){
                var film = json[i.toString()];
                $('#film-search-results').append("<li data-theme='j'><img src='" + film.poster_path + "' alt='Poster' /><a href=''><h3 class='ui-li-heading'>" + film.title + "</h3><p class='ui-li-desc'><strong>" + film.tagline + "</strong></p><p class='ui-li-desc'>" + film.overview + "</p></a></li>");
            }
        },
        error: function(jqxhr, status, text){
            console.log(jqxhr);
        }
    });

EXISTING CONTENT DIV THAT HOLDS THE &lt;ul&gt; ELEMENT:

 <div id="content-add-title" data-role="content">
    <ul id='film-search-results' data-role='listview'></ul>
 </div><!-- end content-add-title -->

AND THE FUNCTION THAT CALLS THE AJAX METHOD:

    $('#add-add-title-btn').click(function() {
        if ($('#add-title-type-select').val() === "movie") {
            $('#right-panel3').panel("close");
            $('#film-search-results').html("");
            searchFilms($('#add-title-name-field').val());
            $('#add-title-page').trigger("create");
            $('#film-search-results').listview("refresh");
        }
    });

真的不知道为什么它的样式不正确,有人有什么想法吗?

【问题讨论】:

  • 您是否将项目附加到页面或面板?
  • 到内容div的&lt;ul&gt;元素
  • @Joe 在 ajax 调用成功时调用 .listview('refresh'); 是否为您解决了这个问题?
  • @ross 不清楚项目是在页面还是面板内创建,因为如果在面板内创建,则应调用 .trigger('pagecreate')
  • @Omar 谢谢,我更新了我的答案以支持这两种情况。

标签: jquery ajax list listview jquery-mobile


【解决方案1】:

您需要在 ajax 调用成功时刷新列表视图,而不是在单击事件处理程序中 -

success: function(json) {
    console.log(json);
    for(var i = 0;  i < Object.size(json); i++){
        var film = json[i.toString()];
        $('#film-search-results').append("<li data-theme='j'><img src='" + film.poster_path + "' alt='Poster' /><a href=''><h3 class='ui-li-heading'>" + film.title + "</h3><p class='ui-li-desc'><strong>" + film.tagline + "</strong></p><p class='ui-li-desc'>" + film.overview + "</p></a></li>");
    }
    $('#add-title-page').trigger("pagecreate"); // <- trigger pagecreate here, shouldnt need listview refresh
},

我猜您的 ajax 调用在 searchFilms 函数内。当您在调用 searchFilms 之后立即调用 $('#film-search-results').listview("refresh");$('#add-title-page').trigger("create"); 时,您的 ajax 调用尚未完成,并且尚未使用 JSON 响应填充列表视图。这就是它不起作用的原因。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多