如何使用?parameter = only链接重新加载页面并替换Jquery Mobile中的当前锚页面?

时间:2012-06-18 18:27:02

标签: javascript jquery jquery-mobile refresh multilingual

听起来很复杂,不是吗......实际上它很容易:

我有一个多语言应用,更改语言需要重新加载页面。

我希望用户为 a)能够更改语言而无需rel =“外部”链接(重新启动应用程序)
b)从任何页面执行此操作,因此我的链接仅包含语言参数?lang = EN

我一直在摆弄这个问题,也从JQM devs获得一些帮助,并试图在JQM文档的动态页面上贴近example

以下解决方案工作正常。请参阅下面的问题:

$(document).on( "pagebeforechange.lang", function( e, data ){
    // just strings
    if (typeof data.toPage === "string") {  
        if (data.toPage.indexOf("?lang=") > -1) {
            console.log("language change")
            // stop here
            e.preventDefault();
            e.stopPropagation();

            var toUrl = $.mobile.path.parseUrl( data.toPage );
                viewSwitch  = toUrl.search.replace( /.*lang=/, "" ),
                form = "",
                service = "some_coldfusion_cfc_to_load_new_language.cfc",
                method = "locale",
                returnformat = "JSON",
                targetUrl = toUrl.filename,
                // fake submit
                formdata = "form_submitted=lang&viewSwitch="+viewSwitch+"&method="+method+"&returnformat="+returnformat,
                successHandler = function() {       

                    alert("changed language successfully")
                    // now we changepage
                    $.mobile.changePage( targetUrl, { 
                        reloadPage: true,
                        transition: "fade",
                        allowSamePageTransition: true
                        });
                    };
            // send AJAX to update language server side    
            // page will reload on success
            ajaxFormSubmit( form, service, formdata, targetUrl, successHandler );
            }
        } 
    });

确定。这有效,但是...页面被添加为DOM的新页面(data-external-page =“true”,所以当我点击下一页时,页面将被删除。

问题
如何使这个重新加载的页面成为新的“锚点”页面=留在DOM中的页面?我可以删除 data-external-page ,但我还需要做些什么?设置基地?...

感谢任何提示!

1 个答案:

答案 0 :(得分:1)

只要重新加载外部页面(不是多页模板的伪页面),就可以使用$.mobile.changePage()轻松地重新加载页面:

$.mobile.changePage('myPage.cfm?lang=EN', {
    reloadPage : true
});

这将从您的服务器请求一个新页面,该页面可以输出所选语言的内容,然后在DOM中删除此页面的当前版本,最后将新版本添加到DOM。

reloadPage标记的文档:http://jquerymobile.com/demos/1.1.0/docs/api/methods.html