jquery-mobile - Jquery mobile,如何使用changePage更新changeHash和参数

标签 jquery-mobile

options.dataUrl = urlObj.href;
$.mobile.changePage( $page, options );

dataUrl 包含带有参数的完整 url

http://example.com/#sales?p=page

但是上面的代码只用哈希值更新url,在新页面加载后...url更改为

http://example.com/#sales

并且不适用?p=page。

这是完整的函数,检查最后几行......

function getSPList( urlObj, options ){
var pageName = urlObj.hash.replace( /.*p=/, "" ),
pageSelector = urlObj.hash.replace( /\?.*$/, "" );

$.ajax({
    url:"getSPList.php",
    dataType: 'json',
    data: {p: pageName},
    success:function(result){
        if ( result ) {
            var $page = $( pageSelector ),
                $header = $page.children( ":jqmData(role=header)" ),
                $content = $page.children( ":jqmData(role=content)" ),
                markup = "<ul data-role='listview' data-filter='true' data-filter-placeholder='Search Salesperson...'>";

            for ( var i = 0; i < result.sp.length; i++ ) {
                markup += "<li><a href='#addClient?p="+ result.sp[i].id +"' data-transition='slide'>" + result.sp[i].name + "</a></li>";
            }
            markup += "</ul>";

            $content.html( markup );
            $page.page();

            $content.find( ":jqmData(role=listview)" ).listview();

            options.dataUrl = urlObj.href;
            options.changeHash = true;

            $.mobile.changePage( $page, options );
        }           
    }
});

return
}

最佳答案

我也遇到过同样的问题,以下是我从版本 1.3.2 开始发现的问题:

内部$.mobile.changePage(toPage, options) options.dataUrl在存储之前通过path.convertUrlToDataUrl()传递并使用过。

path.convertUrlToDataUrl() 内包含“#”之前(包括“#”)以及“?”之后(包括“?”)的所有内容已被剥离。

在将 url 传递给 $.mobile.navigate() 之前,在 $.mobile.changePage() 内部进一步查看,我看到了以下内容:

// rebuilding the hash here since we loose it earlier on
// TODO preserve the originally passed in path
if( !path.isPath( url ) && url.indexOf( "#" ) < 0 ) {
    url = "#" + url;
}

所以这似乎是 jQm 中的一个错误。对于我的应用程序,我将其添加到前面提到的 if 语句的底部:

var query_index = (settings.dataUrl || '').indexOf('?');
if (query_index > -1) {
    url += settings.dataUrl.substring(query_index);
}

这解决了最初的问题,但我不确定潜在的负面影响或是否有更好的解决方法。

关于jquery-mobile - Jquery mobile,如何使用changePage更新changeHash和参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590069/

相关文章:

html - 使用 jquery mobile 创建对话框主页

android - jQuery Mobile 垂直滚动期间触发的 swipeleft/swiperight

jquery移动: how to completely remove the pre-loader from jquery mobile?

jquery - 如何在 jQM 图像按钮上换行文本?

jquery移动: navbar not keeping active state

jquery-mobile - 如何关闭弹出对话框页面并从代码中打开另一个?

forms - JQuery 移动选择选项文本太长

jquery - 我可以让 jQuery Mobile 仅在所有图像加载后才显示页面吗?

Jquery 验证 - errorPlacement 仅在第一次有效

html - JQuery Mobile 添加主屏幕选项?