0

我目前正在研究我公司骨幹應用程序中的一個錯誤,其中一個視圖中的任務正在另一個視圖中禁用行爲。我們正在尋找的行爲是當任務開始並且用戶導航到第二個視圖時,行爲已被禁用,但由於視圖尚未呈現,因此禁用行爲的事件不會被觸發。在Backbone.js之間傳遞消息Views

有沒有解決方法,沒有參數化視圖?

當前代碼如下:

在settings.js:

handleUpdateClick: function(evt) { 
    // ... 
    EventDispatcher.trigger('updatingStateChanged'); 
    // ... 
} 

在dashboard.js:

initialize: function(options) { 
    EventDispatcher.on("updatingStateChanged", this.handleUpdatingStateChanged); 
    // ... 
} 
+0

沒有代碼我們只能猜測。 – hindmost 2015-01-15 15:39:36

+0

@最後我發佈了一些(我猜測主要是無益的)代碼,我在一個非常嚴格的NDA下,所以沒有很多我可以做不幸的事情。 – amarkon 2015-01-15 15:52:09

+0

他在無狀態事件模型中遇到的問題是,如果您「錯過」事件,則無法檢查您處於什麼狀態。使用全局狀態模型克服 – 2015-01-15 20:12:36

回答

0

一般來說,現在很多應用程序做的是有一個全局的「應用程序狀態」模型,您可以在其中存儲當前狀態,並可以在其間共享數據/事件 組件。

0

另一種選擇是擁有一個全局應用程序控制器,可能基於Backbone.Router,它用作事件和消息傳遞的單例 - 在大型項目中經常見到這種情況。

0

要添加到當前的答案,在我的一個Backbone應用程序中,我創建了一箇中心Hub來偵聽事件。因此,它是這樣工作的

//This is outside your view code 
var HUB = {}; 
_.extend(HUB, Backbone.Events); 

在你看來,你聽在集線器事件:

initialize: function(options) { 
    HUB.on('state:change', this.handleUpdatingStateChanged, this);   
     // ... 
} 

然後在你的settings.js你可以觸發事件緊貼輪轂,像這樣:

handleUpdateClick: function(evt) { 
    // ... 
    HUB.trigger('state:change'); 
    // ... 
} 

我認爲這種方法可以解決您的問題。實施也很簡單。一個重要的問題是,當你關閉視圖時,你必須記得停止監聽和取消關閉中心事件 - 通常你只需要在現有的殭屍視圖清理/關閉方法中添加一個HUB.off(null, null, this);即可。

相關問題