簡體   English   中英

如何在執行下一行代碼之前等待Backbone事件觸發器完成

[英]How to wait for Backbone event trigger to complete before executing next line of code

我有一種情況,我打開一個“連接到某事”窗口,然后做一個POST請求。

我這樣做的方式是:

GlobalEventBus.trigger("connection")
doPost()

現在發生的事情是:打開一個連接窗口,我希望用戶輸入憑據,然后在窗口打開后立即觸發POST請求。

我嘗試使用while循環檢查一個布爾變量以查看它是否已完成,但是即使在“連接”窗口打開之前,while循環也會被觸發。

我以前沒有UI或JavaScript的經驗。 我怎樣才能做到這一點?

您可以使用可選參數進行trigger

觸發 object.trigger(event, [*args])
觸發給定事件或空格分隔的事件列表的回調。 觸發器的后續參數將傳遞給事件回調。

所以你可以這樣做:

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

然后'connection'事件的監聽器將從其參數列表中獲取該函數並在適當的時候調用它。 您必須要小心,只有一個偵聽器調用傳遞的回調函數或修改回調函數,以便多次調用它只會導致一個doPost()調用。

或者,您可以完全放棄'connection'事件,轉而使用一個簡單的函數來連接必需的回調:

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

然后getConnectionAnd()將建立對話框並將傳遞的函數附加到其“ok”回調。 如果您對它們有其他用途,您仍然可以觸發事件,但僅僅因為您擁有通用事件總線並不意味着您必須將它用於所有事情。

如果您真的喜歡Backbone事件,您可以修改您的應用程序,請避免此順序:

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

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

  1. 請注意您想要調用function() { doPost() }全局可訪問的地方。
  2. GlobalEventBus.trigger("connection")
  3. 聽取上述內容的人會拋出要求連接詳細信息的對話框。
  4. 該對話框建立連接並觸發GlobalEventBus.trigger('connected')事件。
  5. 有人監聽'connected'事件會查找應該被調用的內容,注意它是來自(1)的函數,調用它,並將函數調用重置為undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM