2011-10-05 168 views
20

我目前有很多痛苦的理解如何JQuery移动处理页面刷新ajax更新后。jQuery Mobile页面刷新机制

我有一个两页 - 独特的文件站点:搜索引擎。

第一页是搜索字段。提交触发器更新第二页的JSON调用和分析器:结果。

现在我正在使用:$.mobile.changePage($('#result'));哪些工作很好从搜索字段到结果页面。 但是: 如果我将它从结果页面重用到next/prev页面(新的json调用,新的解析,DOM中新添加的节点); Jquery Mobile只是不“画”新添加的节点。

任何人都可以解释,讨好的 1- $.mobile.page() 2- $.mobile.changePage() 3- $.mobile.refresh()

或者给我一个提示,我应该如何处理页面的变化的使用和区别。 谢谢!

回答

16

在这里好好看看:http://jquerymobile.com/test/docs/api/methods.html

$.mobile.changePage()是改变从一个网页到另一个,并且参数可以是URL或页面对象。 (仅#result也将工作)

$.mobile.page()不推荐了,请用.trigger("create"),还看到:JQuery Mobile .page() function causes infinite loop?

重要: 创建与刷新:一个重要的区别

注意,有创建事件和某些小部件具有的刷新方法之间的重要区别。创建事件适用于增强包含一个或多个小部件的原始标记。某些小部件所具有的刷新方法应该在已编程操作的现有(已增强的)小部件上使用,并且需要更新UI以进行匹配。例如,如果您有一个页面在页面创建后动态地添加一个新的具有data-role = listview属性的无序列表,触发该列表的父元素上的create会将其转换为listview样式的小部件。如果以编程方式添加更多列表项,调用listview的刷新方法会将这些新列表项更新为增强状态,并保持现有列表项不变。

$.mobile.refresh()不存在我猜

那么,你用你的结果?一个列表视图?然后,你可以通过做更新:

$('ul').listview('refresh'); 

例子: http://operationmobile.com/dont-forget-to-call-refresh-when-adding-items-to-your-jquery-mobile-list/

否则,你可以这样做:

$('#result').live("pageinit", function(){ // or pageshow 
    // your dom manipulations here 
}); 
+1

谢谢解释创建和刷新之间的区别。对于这个简单的解释,一直在寻找高低。 – Craig

7

我张贴在jQuery的论坛(我希望它可以帮助):

潜入到jQM代码我发现这个解决方案。我希望它可以帮助其他人:

要刷新动态修改页面:

function refreshPage(page){ 
    // Page refresh 
    page.trigger('pagecreate'); 
    page.listview('refresh'); 
} 

,即使你创造新的标题,导航栏或页脚工作。我用jQM 1.0.1测试过它。

+0

我试图更新列表视图上的样式,并调用'.trigger('create')'样式化文本和东西,但不是LIs看起来像我想要的按钮。使用'.trigger('refresh')'似乎没有做任何事情。但是在我的列表中使用'.listview('refresh')'做了个窍门!谢谢! (我正在使用JQM 1.1) – CWSpear

+0

我想要从导航栏中删除LI后,让jquery mobile进行刷新。我试过你的代码,它什么都不做。有什么想法吗? –

0

这个答案的伎俩我http://view.jquerymobile.com/master/demos/faq/injected-content-is-not-enhanced.php

在多页面模板的情况下,我修改<div id="foo">...</div>的内容在JavaScript“pagebeforeshow”处理程序,并在脚本的末尾触发刷新:

$(document).bind("pagebeforeshow", function(event,pdata) { 
    var parsedUrl = $.mobile.path.parseUrl(location.href); 
    switch (parsedUrl.hash) { 
    case "#p_02": 
     ... some modifications of the content of the <div> here ... 
     $("#foo").trigger("create"); 
    break; 
    } 
}); 
1

我解决了这个问题通过在我想要刷新的页面上的页面div中使用data-cache =“false”属性。

<div data-role="page" data-cache="false"> 
/*content goes here*/ 

</div> 

就我而言,这是我的购物车。如果顾客将一件物品添加到购物车中,然后继续购物并将另一件物品添加到购物车中,则购物车页面不会显示新物品。除非他们刷新页面。据我所知,将data-cache设置为false将指示JQM不缓存该页面。

希望这可以帮助其他人在未来。

3

我发现这个线程看起来用jQuery Mobile创建一个ajax页面刷新按钮。

@sgissinger与我正在寻找的东西有最接近的答案,但已经过时了。

我更新的jQuery Mobile的1.4

function refreshPage() { 
    jQuery.mobile.pageContainer.pagecontainer('change', window.location.href, { 
    allowSamePageTransition: true, 
    transition: 'none', 
    reloadPage: true 
    // 'reload' parameter not working yet: //github.com/jquery/jquery-mobile/issues/7406 
    }); 
} 

// Run it with .on 
$(document).on("click", '#refresh', function() { 
    refreshPage(); 
}); 
+0

我改进了这一点,点击后删除了点击事件(通过添加.off())。否则,页面刷新,第二次用户点击时,该事件将触发两次。 – kloarubeek

+0

编辑被拒绝,我建议在刷新完成后删除点击事件:$(document).off(“click”,“#refresh”)。on(“click”,“#refresh”,function() { refreshPage(); }); – kloarubeek