Jquery mobile jQuery移动页面刷新机制

Jquery mobile jQuery移动页面刷新机制,jquery-mobile,Jquery Mobile,在理解jquerymobile如何处理ajax更新后的页面刷新时,我感到非常痛苦 我有一个两页独特的文件网站:搜索引擎 第一页是一个搜索字段。Submit触发JSON调用和解析器,更新第二个页面:results 现在我使用的是:$.mobile.changePage($(“#结果”)从搜索字段到结果页,这项工作做得很好。 然而: 如果我在下一页/上一页的结果页中重用它(新的json调用、新的解析、DOM中新添加的节点); Jquery Mobile只是不“绘制”新添加的节点 有人能解释一下这个词

在理解jquerymobile如何处理ajax更新后的页面刷新时,我感到非常痛苦

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

第一页是一个搜索字段。Submit触发JSON调用和解析器,更新第二个页面:results

现在我使用的是:
$.mobile.changePage($(“#结果”)从搜索字段到结果页,这项工作做得很好。
然而:
如果我在下一页/上一页的结果页中重用它(新的json调用、新的解析、DOM中新添加的节点);
Jquery Mobile只是不“绘制”新添加的节点

有人能解释一下这个词的用法和区别吗 1-
$.mobile.page()
2-
$.mobile.changePage()
3-
$.mobile.refresh()

或者给我一个如何处理页面更改的提示。
谢谢

请仔细看看这里:

$.mobile.changePage()
是从一个页面更改到另一个页面,参数可以是url或页面对象。(只有#结果也有效)

不再推荐使用
$.mobile.page()
,请使用
.trigger(“创建”)
,另请参见:

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

请注意,创建事件和刷新方法之间有一个重要的区别,这两种方法在一些小部件中都有。create事件适合于增强包含一个或多个小部件的原始标记。某些小部件的刷新方法应该用于以编程方式操作的现有(已经增强的)小部件,并且需要更新UI以匹配这些小部件

例如,如果您有一个页面,其中在页面创建之后动态地附加了一个新的无序列表,该列表带有data role=listview属性,则在该列表的父元素上触发create会将其转换为listview样式的小部件。如果随后以编程方式添加了更多列表项,则调用listview的刷新方法将只将这些新列表项更新为增强状态,而保留现有列表项不变

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

那么你用什么来获得结果呢?列表视图?然后,您可以通过执行以下操作进行更新:

$('ul').listview('refresh');
例如:

否则,您可以执行以下操作:

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

我在jQuery论坛上发布了这个消息(我希望它能有所帮助):

深入研究jQM代码,我找到了这个解决方案。我希望它能帮助其他人:

要刷新动态修改的页面,请执行以下操作:

即使您创建了新的页眉、导航栏或页脚,它也可以工作。我已经用jqm1.0.1对它进行了测试


从这里开始,我也在jquerymobile1.2.0上测试了这个答案

在多页模板的上下文中,我在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;
  }
});
$(document).bind(“pagebeforeshow”,函数(事件,pdata){
var parsedUrl=$.mobile.path.parseUrl(location.href);
开关(parsedUrl.hash){
案例“#p#02”:
…对此处的内容进行了一些修改。。。
$(“foo”).trigger(“create”);
打破
}
});

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

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

</div>

/*内容在这里*/
就我而言,那是我的购物车。如果客户向购物车添加了一个项目,然后继续购物,然后向购物车添加了另一个项目,购物车页面将不会显示新项目。除非他们刷新了页面。将数据缓存设置为false将指示JQM在我理解的范围内不缓存该页面


希望这对以后的其他人有所帮助。

我发现这个线程希望用jQuery Mobile创建一个ajax页面刷新按钮

@斯吉辛格的答案与我想要的最接近,但已经过时了

我更新了jquerymobile1.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();
});

感谢您解释创建和刷新之间的区别。为了这个简单的解释,我到处寻找。我试图更新listview上的样式,并调用
.trigger('create')
为文本和内容设置样式,但没有将LIs设置为我想要的按钮。使用
.trigger('refresh')
似乎什么都没做。但是在我的列表中使用
.listview('refresh')
就成功了!谢谢(我使用的是jqm1.1)我试图在从导航栏中删除LI后让jquerymobile刷新。我试过你的代码,但什么都没用。有什么想法吗?我对此做了一些改进,并在单击之后删除了单击事件(通过添加.off())。否则,页面将刷新,用户第二次单击时,事件将触发两次。编辑被拒绝,我建议在刷新完成后删除单击事件:$(document).off(“click”、“#refresh”)。on(“click”、“#refresh”,function(){refreshPage();});
<div data-role="page" data-cache="false">
/*content goes here*/

</div>
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();
});