0

それは複雑に聞こえますね...実際には非常に簡単です:

多言語アプリを持っていますが、言語を変更するにはページをリロードする必要があります。

ユーザーにa)リンクをrel = "external"せず
に言語を変更できるようにする(アプリを再起動する) b)任意のページからこれを行うため、リンクには言語パラメーター?lang=ENのみが含まれるようにします

私はこれをずっといじっていて、JQM開発者からも助けを得て、JQMドキュメントの動的ページでこのに近づこうとしています。

次の解決策はまあまあです。以下の私の質問を参照してください:

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

Ok。これは機能しますが...ページは新しいページとしてDOMに追加されます(data-external-page = "true"を使用するため、次のページをクリックするとページが削除されます。

質問
このリロードされたページを新しい「アンカー」ページ= DOMにとどまるページにするにはどうすればよいですか?data-external-pageを削除できますが、他に何をする必要がありますか?ベースを設定しますか?...

ヒントをありがとう!

4

1 に答える 1

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

于 2012-06-18T18:54:36.077 に答える