在主干.js视图之间传递消息
Pass Messages Between Backbone.js Views
我目前正在处理我公司主干应用程序中的一个错误,其中一个视图中正在进行的任务应该禁用另一个视图中的行为。我们正在寻找的行为是,当任务开始并且用户导航到第二个视图时,该行为已被禁用,但由于视图尚未呈现,因此不会触发禁用该行为的事件。
有没有办法在不参数化视图的情况下解决这个问题?
当前代码如下:
在设置中.js:
handleUpdateClick: function(evt) {
// ...
EventDispatcher.trigger('updatingStateChanged');
// ...
}
在仪表板中.js:
initialize: function(options) {
EventDispatcher.on("updatingStateChanged", this.handleUpdatingStateChanged);
// ...
}
通常,许多应用程序所做的是具有全局"应用程序状态"模型,您可以在其中存储当前状态,并且可以在组件之间共享数据/事件。
另一种选择是拥有一个全局应用程序控制器,可能基于Backbone.Router
作为事件和消息传递的单例 - 在大型项目中经常看到这种情况。
为了补充当前的答案,在我的一个 Backbone 应用程序中,我创建了一个中央集线器来监听事件。所以它是这样工作的
//This is outside your view code
var HUB = {};
_.extend(HUB, Backbone.Events);
在您的视图中,您可以侦听 Hub 上的事件:
initialize: function(options) {
HUB.on('state:change', this.handleUpdatingStateChanged, this);
// ...
}
然后在设置中.js您可以针对 Hub 触发事件,如下所示:
handleUpdateClick: function(evt) {
// ...
HUB.trigger('state:change');
// ...
}
我认为这种方法可以解决您的问题。实现起来也很简单。一个重要的问题是,您必须记住在关闭视图时停止侦听并取消委托来自中心的事件 - 通常您只需向现有的僵尸视图清理/关闭方法添加一个HUB.off(null, null, this);
。
相关文章:
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何在弹出脚本到内容脚本之间发送消息并返回
- 通过node.js和socket.io在两个用户之间发送消息
- 如何在Chrome扩展弹出窗口和内容脚本之间发送消息
- 在主干.js视图之间传递消息
- 在页面之间显示“页面加载”消息
- 发布两个网站之间的消息
- PHP 和 Jquery 之间的消息传递
- 在操作之间发送 Ajax 消息集超时 m 延迟
- 无法在TCP服务器和节点.js之间发送消息
- Chrome 扩展程序:无法让消息传递在后台脚本和内容脚本之间正常工作
- javascript/整个脚本块(在脚本标记之间)被禁用,没有错误消息
- 如何使用端口在main.js和面板之间传输消息'的内容脚本
- 在format.html和format.js之间显示Rails3 Flash消息
- 两个窗口或选项卡之间的跨文档消息传递,而不是iframe
- 在树莓派上的HTML和python之间发送消息
- Chrome扩展消息在内容和后台之间传递
- 内容脚本和背景页面之间的消息传递在chrome扩展是不工作,因为它应该是
- Firefox插件之间的消息
- FCM -下游消息和上游消息之间的差异