これは簡単な質問ですが、何かおかしなことが起こっているようです。私は Django を使用しており、任意のページ ビューで現在のメッセージを表示する jQuery モバイル ダイアログを開きたいと考えています。ダイアログを閉じた後、ウィンドウは表示しようとしていたページを返す必要があります。したがって、実際の問題は、ページの読み込み時にダイアログを開き、ページを表示する方法です。
これ(多くのバリエーション)は機能しません:
{% if messages %}
<section class="dialog" id="messagesDialog" data-role="dialog" data-theme="a">
<header class="okay" data-role="header"><h1>This is a title</h1></header>
<div data-role="content">
<ul>
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
</div> {# content #}
</section>
<script type="text/javascript">
$(document).one('pageinit', function(event) {
$.mobile.changePage("#messagesDialog", 'pop', true, true);
});
</script>
{% endif %}
しかし、これは:
{% if messages %}
<section class="dialog" id="messagesDialog" data-role="dialog" data-theme="a">
<header class="okay" data-role="header"><h1>This is a title</h1></header>
<div data-role="content">
<ul>
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
</div> {# content #}
</section>
<script type="text/javascript">
$(document).one('pageinit', function(event) {
$.mobile.changePage("WhatHeck?!?!"); // This will return a 500 error from the server
$.mobile.changePage("#messagesDialog", 'pop', true, true);
});
</script>
{% endif %}
それで、これは既知の問題ですか、それとも私が見逃しているものですか? ページを取得してダイアログをポップし、それを閉じた後に正しいページを表示できる唯一の方法は、$.mobile.changePage()
ダイアログに変更する前にエラーを発生させるために呼び出すことです。
===追加===
エラーなし、ダイアログなし、正しいページ:
$("section@[data-role=page]").one('pagechange', function(event) {
//$.mobile.changePage("WhatHeck?!?!");
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
エラーなし、ダイアログを開く、間違ったページ:
$(document).one('pagechange', function(event) {
//$.mobile.changePage("WhatHeck?!?!");
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
/WhatHeck?!?! を要求しているサーバーからの 500 エラー (予想)、ダイアログが開き、正しいページ:
$(document).one('pagechange', function(event) {
$.mobile.changePage("WhatHeck?!?!");
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
エラーなし、ダイアログを開く、間違ったページ:
$(document).one('pagechange', function(event) {
$.mobile.changePage($("section@[data-role=page]"));
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
エラー: 「Uncaught TypeError: 未定義のメソッド '_trigger' を呼び出せません」、ダイアログなし、正しいページ:
$(document).one('pagechange', function(event) {
$.mobile.changePage($("section@[data-role=page]",{
changeHash : true
}));
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
エラーなし、ダイアログを開く、間違ったページ:
$(document).one('pagechange', function(event) {
$.mobile.changePage("#Home");
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
実際に動作します!
$(document).one('pagechange', function(event) {
$.mobile.changePage("#Home", {
allowSamePageTransition : true
});
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
また動作します (任意のページの場合):
$(document).one('pagechange', function(event) {
$.mobile.changePage($("section@[data-role=page]"), {
allowSamePageTransition : true
});
$.mobile.changePage("#messagesDialog",{
transition : 'pop',
reverse : false,
changeHash : true
});
});
だから私の問題の解決策は、この質問への答えです:エラーページの読み込みに失敗したときにjqueryモバイル状態で何が起こっていますか?
そのため、pagechange イベント ハンドラー内から changePage を呼び出すと、履歴がまだ更新されていないように見えます。現在のページを強制的にリロードしてからダイアログを開く必要があることは、まだ意味がありません。これは、サーバーからのエラーを予期するよりも、少なくとも優れたソリューションです。