Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干项目还是路线?_Backbone.js - Fatal编程技术网

Backbone.js 主干项目还是路线?

Backbone.js 主干项目还是路线?,backbone.js,Backbone.js,由于主干网提供了两种应对特定事件的方式,我想知道普遍的共识是什么。这是一种非常常见的情况-我在页面上有一个链接,我可以在页面上设置href来路由它,这样路由器就可以调用一个函数来处理它,如下所示: HTML JS var AppRouter = Backbone.Router.extend({ routes: { "posts/:id": "getPost" } }); var AppRouter=Backbone.Rout

由于主干网提供了两种应对特定事件的方式,我想知道普遍的共识是什么。这是一种非常常见的情况-我在页面上有一个链接,我可以在页面上设置href来路由它,这样路由器就可以调用一个函数来处理它,如下所示:

HTML


JS

var AppRouter = Backbone.Router.extend({ routes: { "posts/:id": "getPost" } }); var AppRouter=Backbone.Router.extend({ 路线:{ “posts/:id”:“getPost” } }); 或者我可以在视图中对事件做出如下响应:

var MyView = Backbone.View.extend({ ... events: { "click .handleInView": "open", }, ... open: function() { ... } }); var MyView=Backbone.View.extend({ ... 活动:{ “click.handleInView”:“打开”, }, ... 打开:函数(){ ... } }); 我知道路由为您提供了历史记录和直接链接的额外好处,但是从性能和代码布局的角度来看,如果我不关心历史记录,那么什么是更好的方法呢


我的路线可以是一个单一的地方,在那里我可以看到所有的交互,但也可能会很快变得杂乱无章。

如果你不关心历史或书签,事件的副作用会更少(人们不会尝试将它们添加书签,也不会干扰你的历史),而且它们的实现和处理更简单/更快


就性能而言,它们也稍微快一点(但实际上这两种方法都不够慢,根本不重要)。

我同意这些评论。任何需要深度链接、书签等的内容都应该使用路由进行处理。但是,如果您有一个选项卡视图,或者另一个从URL不可访问的视图,并且嵌套在另一个视图中,那么在视图代码内部处理它可能更有意义。至于混乱,您可能需要考虑将路由重新组织为单独的文件。这里有一些例子


通常,当您调用应用程序状态的重大更改时,或者您希望维护浏览历史记录(通过backbone.history)时,会使用路由,以便用户可以通过浏览器按钮在状态之间来回导航

理想情况下,您可以在不同的情况下使用这两种方法

我喜欢根据我的页面上正在发生的变化来思考它。如果常规页面状态相同,但某些元素正在更改或更新,我将使用事件。如果常规页面状态正在更改,或者如果我正在加载不同的UI屏幕,我将使用路由

var MyView = Backbone.View.extend({ ... events: { "click .handleInView": "open", }, ... open: function() { ... } });