我目前正在处理公司骨干应用程序中的一个错误,其中一个视图中正在进行的任务应禁用另一个视图中的行为。我们正在寻找的行为是当任务开始并且用户导航到第二个视图时,行为已被禁用,但由于尚未呈现视图,因此不会触发禁用该行为的事件。
如果没有参数化视图,有没有解决方法呢?
目前的代码如下:
在settings.js中:
handleUpdateClick: function(evt) {
// ...
EventDispatcher.trigger('updatingStateChanged');
// ...
}
在dashboard.js中:
initialize: function(options) {
EventDispatcher.on("updatingStateChanged", this.handleUpdatingStateChanged);
// ...
}
答案 0 :(得分:0)
通常,许多应用程序所做的是具有全局"应用程序状态" model,用于存储当前状态,可以在组件之间共享数据/事件。
答案 1 :(得分:0)
另一种选择是拥有一个全局应用程序控制器,可能基于Backbone.Router
,它作为事件和消息传递的单例 - 在大型项目中经常看到这种情况。
答案 2 :(得分:0)
要添加到当前的答案,在我的一个Backbone应用程序中,我创建了一个中央Hub来监听事件。所以它就像这样
//This is outside your view code
var HUB = {};
_.extend(HUB, Backbone.Events);
在您的视图中,您可以在Hub上收听事件:
initialize: function(options) {
HUB.on('state:change', this.handleUpdatingStateChanged, this);
// ...
}
然后在你的settings.js中你可以像这样触发对Hub的事件:
handleUpdateClick: function(evt) {
// ...
HUB.trigger('state:change');
// ...
}
我认为这种方法可以解决您的问题。实现起来也很简单。一个重要的问题是,当您关闭视图时,必须记住停止侦听和取消扇区中的事件 - 通常您只需在现有的僵尸视图清理/关闭方法中添加HUB.off(null, null, this);
。