0

一部のページ遷移で、ページ変更ハンドラーがアプリ内で 2 回起動するという問題があります。deviceready ハンドラで:

$(document).bind("pagechange", onPageChange);

次に、ハンドラ:

var onPageChange = function (event, data) {
    var fromPageId = null;

    //Get the ID of the page we are transitioning to.
    var toPageId = data.toPage.attr("id");

    //Get the ID of the page we are coming from.
    if (data.options.fromPage) {
        fromPageId = data.options.fromPage.attr("id");
    }

    console.log("pagechange to " + toPageId + " from " + fromPageId);

    switch (toPageId){
        ...
    }
}

アプリがあるページから次のページに遷移するとき、onPageChange が 2 回起動していることを LogCat で確認できます。

01-26 18:49:50.490: I/Web Console(18244): pagechange to care-plan-view from care-plan-view:25
01-26 18:49:50.490: I/Web Console(18244): pagechange to care-plan-view from care-plans:25

これはログに表示される順序です。奇妙なことに、ケア プラン ビューが宛先ページで、ケア プランが開始ページです。

これは、ページ遷移の問題を引き起こすサンプル リンクです。

<a data-role="button" data-icon="arrow-r" data-iconpos="right" href="#care-plan-view?id=9e273f31-2672-47fd-9baa-6c35f093a800&amp;name=Sat"><h3>Sat</h3></a>

なぜこれが起こるのでしょうか?

乾杯、ドン

4

1 に答える 1

1

pagechangeイベントが 2 回発生する理由はchangePage、toPage が jQuery 拡張 DOM オブジェクトでない場合の再帰呼び出しによるものです。

開発者はイベント内で toPage を変更できるため、この再帰は危険です。開発者がイベント ハンドラー内で一貫して toPage を文字列に設定すると、pagechangeそれがオブジェクトであるかどうかに関係なく、無限再帰ループが発生します。

このpageloadイベントは、新しいページをデータ オブジェクトのページ プロパティとして渡します (これはドキュメントに追加する必要がありますが、現在はリストされていません)。したがって、このpageloadイベントを使用して、ロードされたページにアクセスできます。

簡単に言えば、これは を介し​​て追加のパラメータを送信しているために発生していますpageChange

この問題を解決するには、次のような別のページ イベントを選択します。

event pagebeforecreate
event pagecreate
event pageinit
event pagebeforehide
event pagebeforeshow
event pageremove
event pagehide
event pageshow

この問題の詳細については、私のブログARTICLEを参照してください。「複数のイベントのトリガーを防ぐ」の章を検索してください。または、ここで見つけることができます。

于 2013-01-26T19:45:05.907 に答える