AJQ内容列表视图('刷新')的JQM(jQueryMobile)问题无法正常工作

时间:2011-04-08 15:08:16

标签: ajax listview jquery jquery-mobile

这是对我正在做的事情的嘲笑:

function loadPage(pn) {
    $('#'+pn).live('pagecreate',function(event, ui){
        $('#'+pn+'-submit').click( function() {
            $.mobile.changePage({
                    url: 'page.php?parm=value', 
                    type: 'post', 
                    data: $('form#'+pn+'_form')
                },'slide',false,false);

            loadAjaxPages(pn);
        });
});

function loadAjaxPages(page) {
    // this returns the page I want, all is working
    $.ajax({
        url: 'page.php?parm=value',
        type: 'POST',
        error : function (){ document.title='error'; }, 
        success: function (data) {                  
            $('#display_'+page+'_page').html(data); // removed .page(), causing page to transition, but if I use .page() I can see the desired listview
        }
    });
}

在ajax调用返回中,如果我添加.page()(过去有效,但我把它放在页面功能的一边,更改了如何加载页面以节省加载时间的逻辑),使页面转换到下一页但我可以看到列表视图的样式符合我的要求:

$('#display_'+page+'_page').html(data).page();

删除.page()可修复转换错误,但现在页面没有样式。我尝试了listview('refresh')甚至listview('refresh',true),但没有运气。

有关如何让listview刷新的想法吗?

解决方案:

$.ajax({
    url: 'page.php?parm=value',
    type: 'POST',
    error : function (){ document.title='error'; }, 
    success: function (data) {                  
        $('#display_'+page+'_page').html(data);
        $("div#name ul").listview(); // add div wrapper w/ name attr to use the refresh
    }
});

2 个答案:

答案 0 :(得分:4)

  1. 请务必在ul元素
  2. 上调用.listview
  3. 如果它之前没有样式,你只需调用.listview(),即刷新功能。如果您的firebug设置正确,您应该看到一条错误消息告诉您。
  4. 在您发布修补程序之前,我没有时间创建一些代码,但这是我的一点建议:

    if(data !== null){ $('#display_'+page+'_page').html(data).find("ul").listview() }
    

    这比新的全局选择器好一点。此外 - 您不需要div,如果您有多个UL,则可以提供详细的选择。

    警告:以上代码需要data !== null。如果它为null - 它将引发错误。

答案 1 :(得分:0)

如果将项目添加到列表视图,则需要在其上调用refresh()方法来更新样式并创建添加的任何嵌套列表。例如:

$( '#MYLIST')列表视图( '刷新');

请注意,refresh()方法仅影响追加到列表的新节点。这是出于性能原因而完成的。刷新过程将忽略已增强的任何列表项。这意味着如果更改已增强的列表项的内容或属性,则不会反映这些内容或属性。如果要更新列表项,请在调用refresh之前将其替换为新标记。

更多信息here