视图和路由器之间的主干关系
Backbone relationship between the view and the router
我认为,在数据驱动的编程范式中,路由器和视图应该相互隔离,它们只有通过模型更改才能相互通信,它们都订阅了模型更改。
然而,网上的各种教程都有不同的做法。我看到了在路由器的initialize方法中实例化视图的代码,从而为路由器提供了访问视图的方法。我还看到了将路由器传递到视图的代码,这样视图就可以监听路由器路由事件的更改。
我认为这两种方法都不对,因为它打破了关注的分离。由于我是Backbone的新手,能有更有经验和知识的人来确认吗?
我认为使用路由器实例化视图没有任何问题,实际上这是我的工作方式。路由器检测到一个新的URL,并分离任何未使用的视图,实例化请求的URL。
将Router引用传递到视图可能会更难看,更不用说让引用在视图和子视图之间传递太多了。
但另一方面,视图必须能够向路由器发送信号以更改导航,因此我也采取了简单的方法,使路由器对我的应用程序中的所有元素都全局可见,并且我可以从任何视图调用App.router.navigate()
,而无需记住显式传递引用。这一决定可以辩护,因为在任何主干应用程序中都只允许使用一个路由器实例。
在一些项目中,我使用了全局事件调度器,它将路由事件传递到视图。
window.Dispatcher = _.extend({}, Backbone.Events);
在路由器中,您可以绑定到捕获route:*
事件的'all'
事件:
initialize: function() {
this.bind('all', this.onRoute);
},
onRoute: function(route) {
Dispatcher.trigger(route);
}
在视图中,您可以绑定到Dispatcher事件并对路由更改做出反应:
initialize: function() {
Dispatcher.on('route:index', this.onIndex, this)
}
这类似于在路由更改时更改模型,但我觉得这更容易管理,也不需要将路由器传递给视图。不确定这是否是正确的方法,但Backbone可以让你以多种不同的方式做事。
相关文章:
- JSDoc:模块和名称空间之间的关系是什么
- html5视频播放器和视频js之间的关系
- 两个集合mongodb之间的关系
- angular2@组件和类之间的关系
- 在Knockout.js模型中创建项之间的关系
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 视图和路由器之间的主干关系
- JavaScriptV5中的绑定和JQuery之间有任何关系吗
- 高图 - 分组/近似后保持多个系列之间的关系
- 父关系指令和子关系指令之间的绑定
- 绘制的节点和Google图表/可视化中的数据节点之间的关系
- 如何解决存储中操作之间的依赖关系
- 负载角度依赖关系之间的区别是什么,共享模块的最佳方式是什么
- 如何管理原始对象之间的数据依赖关系
- undercore.js-包含和减少之间的关系
- 如何在不让web组件的原型进入全局命名空间的情况下维护它们之间的依赖关系
- 什么's JavaScript和HTML之间的关系
- 命名空间和词法范围之间的关系是什么
- JS:“data-background-color”和.data(“background-color”)之间的关系
- 突出显示一组节点及其之间的关系