jQuery Mobile v1.4、2014 年 2 月です。
そのため、ここ (gihub)で、読み込まれたページが意図したものであるかどうかを判断するためif
に、キャッチされたイベントに関するステートメントを作成することになっていることを読みました。pagecontainer
これは、新しい pageContainer ウィジェットの意図された動作とその用途を理解するための小さなシナリオです。
そのように単純なログインページで、ウェルカムページをプログラムでプリフェッチし、ログインに成功するとウェルカムページに切り替えます。ウェルカム ページには、ページをアニメーション化するためのJS スクリプトが含まれており、ページが表示されている場合にのみ起動する必要があります。どうやってそれを行うのですか?
コンソールからpagecontainer イベントを調査しているときに得た結果を次に示します。ここでの私の目標は、ようこそ (実際には任意のページ) ページがアクティブ/表示されていることを検出する方法を見つけることです。
理解のために、この形式をクエリとして使用しました。
$( 'body' ).on( 'pagecontainerbeforeload', function( event, ui ) {
console.log("beforeload");
console.log(event);
console.log(ui);
});
初めてページとJQMをロードしたとき(つまり、新たなスタート/Users/login
)
使用可能なイベント:
- pagecontainercreate => 空の UI
- PCbeforetransition => ui.toPage使用可能
- PCshow => ui.prevPage のみを取得します (その場合は空です)
- PCtransition => ui.toPage使用可能
現在、トランジション効果を無効にしても、これらは常に起動されます ( api を参照) 。
わかりました、それから私はプログラムでページをロードしたいです(プリフェッチします)、私はそうします:(欲しい/Users/welcome
)
$("body").pagecontainer("load", "/Users/welcome");
これらのイベントが開始されます (ページはまだ表示されていません):
- PCbeforeload => ページを識別するために使用できる URL を取得します。
- PCload => PCbeforeload とほぼ同じデータ
よし、ではページを変更します : (to /Users/welcome
)
$("body").pagecontainer("change", "/Users/welcome");
これらのイベントがトリガーされます。
- PChide => ui.nextPageは ui.toPage と同じです...
- PCbeforetransition => ui.toPage使用可能
- PCshow => ui.prevPage のみを提供します
- PCtransition => ui.toPageが期待どおりに存在する
これで、このページがロードされていることを確認するために使用したい唯一の pagecontainer イベントはpagecontainertransition
. JS を起動する必要があるすべてのページに実装したものは次のとおりです。
ページコンテナの ID を設定する(PHP)
<div data-role="page" data-theme='a' id="<?php echo $this->id_url()?>">
...ページの最後(JS)
$( 'body' ).on( 'pagecontainertransition', function( event, ui ) {
if(ui.toPage[0] == $('#'+id_url )[0] ) {
functionToLaunchWhenPageShowUp();
}
} );
ui.toPage
さて、ご覧のとおり、 1st child[0]
と比較するために$('.selector')
1st child を参照してい[0]
ます。それは正しい方法ですか?つまり、新しい API によって意図された方法です。知識を共有していただきありがとうございます;)