2012-02-27 8 views
1

私はアプリケーションのためにJQuery Mobileを使用しています。それは素晴らしいフレームワークですが、私が学んでいるニュアンスがあります。現在、私は2ページのアプリケーションを持っています。ユーザーが2番目のページに移動すると、私はWebサービスと対話します。 Webサービスが成功を返す場合は、2ページ目を読み込みます。 Webサービスが失敗したメッセージを返す場合は、プロンプトが表示されたダイアログを表示します。 、私は現在、次のやっていることを実行します。JQuery Mobile - ダイアログとの対話

my.js

$("#page2").live("pageshow", function() { 
    var isGood = getResult(); 
    if (isGood == false) { 
    $.mobile.changePage("/myDialog", { role: "dialog" }); 
    } 
    else { 
    // Continue loading page2 related information 
    } 
}); 

現在、このロジックは私が必要とするほとんどのように動作します。ダイアログが表示されます。しかし、私がそれを閉じると、 "page2"の "pageshow"イベントが再び発生します。したがって、ダイアログを再度読み込みます。本質的に、私は無限ループを持っています。私はこれを回避する方法がわかりません。ほとんどの場合、ダイアログはページに関連するのではなく、DOM自体に完全にロードされているようです。そのため、私は対話イベントにどのように反応するか、それとも対話するかはわかりません。これをどうやって回避するのですか?

あなたは

答えて

0

私は、これは、これを行うための最善の方法であるかどうかわからないんだありがとう、それが動作するはずです:

var dialogShown = false; 

$("#page2").live("pageshow", function() { 
    if(dialogShown) 
    return; 
    var isGood = getResult(); 
    if (isGood == false) { 
    $.mobile.changePage("/myDialog", { role: "dialog" }); 
    dialogShown = true; 
    } 
    else { 
    // Continue loading page2 related information 
    } 
}); 
0

私は、非常に似た何かを私がすることを確認してい除きユーザーが認証ダイアログを通過しました。私は、独自のイベントシステムを持っている私自身のオブジェクト、MYAPPを、持っている

(function(){ 
    // Bind to jQM's page change event 
    $(document).on('pagebeforechange', function(e, data) { 
    var loadPage = function(){}; 

    if (typeof data.toPage !== "string") { 
     // Continue with normal jQM operation 
     return; 
    } 

    if (data.toPage.match(/skipCheck=1/)) { 
     // We have already performed all of our checks. 
     // Send the user on to the desired location. 
     return; 
    } 

    loadPage = function() { 
     // The user seems to be authorized right now so let's 
     // send him on to his desired location. 
     $.mobile.changePage(data.toPage + "?skipCheck=1", data.options); 
    }; 

    if (data.toPage.match(/securedPage/)) { 
     e.preventDefault(); // Stop the page load until we know more 
     MYAPP.addEvent('isLoggedInComplete', loadPage); 

     // This is where you would do something in lieu of the 
     // the actual page change event. 
    } 
    }); 
}()); 

注:次のコードブロックは、私がこの操作を処理する方法の核心です。そのオブジェクトのイベントシステムを使用して、2番目のページの読み込みを開始します。

これの鍵とあなたの質問に対する答えは、 'skipCheck'クエリパラメータのチェックです。このパラメータは、ページロードイベントを通常のように完了させるかどうかを判断するために、または、私がそれを傍受して何か他のことを行うべきかどうかを判断するために現在使用しているパラメータです。

もう1つ注意してください。このコードは、開発の初期段階にあるアプリケーションからのものです。私はこのアプリケーションで仕事を学んでいるので、私はjQMを学んでいます。したがって、これは問題を処理する最善の方法ではないかもしれません。

関連する問題