それは複雑に聞こえますね...実際には非常に簡単です:
多言語アプリを持っていますが、言語を変更するにはページをリロードする必要があります。
ユーザーに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を削除できますが、他に何をする必要がありますか?ベースを設定しますか?...
ヒントをありがとう!