2012-02-01 9 views
0

「何かに接続」ウィンドウを開いてPOST要求を行う状況があります。次のコード行を実行する前にバックボーンイベントトリガーが完了するのを待つ方法

私はそれを行う方法は、次のとおりです。

GlobalEventBus.trigger("connection") 
doPost() 

今何が起こるです:接続ウィンドウは、私は、ユーザーが認証情報を入力するように期待するところが開き、ものではありませんが、POSTリクエストは、ウィンドウが取得する権利後解雇されます開いた。

ブール変数をチェックして完了しているかどうかを確認するためにwhileループを配置しようとしましたが、whileループは「接続」ウィンドウが開く前に起動します。

私は以前のUIやJavaScriptに関する経験はありません。どうすればこの作品を作れますか?

答えて

2

あなたはtriggerのためのオプションの引数を使用することができます。

トリガーobject.trigger(event, [*args])
トリガーのコールバックを指定した場合、またはイベントのスペースで区切られたリストのため。トリガの後続の引数は、イベントコールバックに渡されます。

GlobalEventBus.trigger("connection", function() { doPost() }); 
// or 
GlobalEventBus.trigger("connection", doPost); 

をしてから'connection'イベントのリスナーは、その引数リストのうち、機能を取得し、適切な時間でそれを呼び出します。

だから、これを行うことができます。 1つのリスナーだけがコールバック関数を呼び出したか、コールバック関数を変更して複数回コールすると1つのdoPost()コールしか発生しないように注意する必要があります。

また、あなたは、必要なコールバックをフックし、単純な機能の賛成で完全'connection'イベントをドロップすることができます:その後、

app.getConnectionAnd(function() { doPost() }); 

getConnectionAnd()は、ダイアログを設置し、その「OK」に渡された関数を添付します折り返し電話。あなたはそれらのために他の用途があったとしても、一般目的のイベントバスを持っているからといって、それをすべてのものに使う必要があるわけではありません。

あなたはこのシーケンスを避けるか、アプリケーションを手直しができます本当に気に入っバックボーンイベント場合:そのグローバルにアクセス可能などこか

  1. 注:

    GlobalEventBus.trigger("connection"); 
    doPost(); 
    

    代わりに、あなたはdoPostをトリガーする別のイベントを追加することができますfunction() { doPost() }に電話してください。

  2. GlobalEventBus.trigger("connection")がトリガーされます。
  3. 上記を聞く人は、接続の詳細を尋ねるダイアログをスローします。
  4. ダイアログが接続を確立し、GlobalEventBus.trigger('connected')イベントをトリガーします。
  5. 'connected'イベントをリッスンしている人は、何が呼び出されるのかを調べ、それが(1)の関数であることに気づき、それを呼び出し、関数呼び出しをundefinedにリセットします。
関連する問題