2015-01-15 109 views
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);即可。