2012-02-01 44 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'事件聽者會搶出功能參數列表,並在適當的時候調用它。您必須小心,只有一個偵聽器調用傳遞的回調函數或修改回調函數,以便多次調用它只會導致一個doPost()調用。

或者,你可以放下'connection'事件完全贊成簡單的函數,掛接必要的回調:

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

然後getConnectionAnd()會豎起對話框,並附上傳遞的功能,它的「OK」回電話。如果您還有其他用途,但仍然可以開展活動,但僅僅因爲您擁有一般用途的活動巴士並不意味着您必須將其用於一切。

如果你真的很喜歡骨幹事件,你可以返工您的應用程序就可以避免這個順序:

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

相反,你可以添加觸發doPost另一個事件:

  1. 注意的地方,你全局訪問想要撥打function() { doPost() }
  2. GlobalEventBus.trigger("connection")被觸發。
  3. 有人在聽上述內容時會彈出詢問連接細節的對話框。
  4. 該對話框建立了連接並觸發了一個GlobalEventBus.trigger('connected')事件。
  5. 有人在偵聽'connected'事件查找應該調用的內容,注意到它是(1)中的函數,調用它並將函數調用重置爲undefined
相關問題