骨干事件或路由?

时间:2012-12-31 17:31:20

标签: backbone.js

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

HTML

 <a href='#posts/2' class='handleInView'>Item 2</a>

<a href='#posts/2' class='handleInView'>Item 2</a> JS

var AppRouter = Backbone.Router.extend({
        routes: {
            "posts/:id": "getPost"
        }
    });

或者我可以像这样回应视图中的事件:

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

  ...

  open: function() {
      ...
  }

});

我知道路线为您提供历史和直接链接的额外好处,但从性能角度和代码布局的角度来看,如果我不关心历史,那么更好的方法是什么。

我的路线可能是一个单独的地方,我可以看到所有的互动,但它也可能很快就会混乱。

3 个答案:

答案 0 :(得分:1)

如果您不关心历史记录或书签,事件的副作用较少(人们不会尝试将它们加入书签,并且不会干扰您的历史记录),并且它们的实施和处理更简单/更快捷。

在性能方面,它们也稍微快一点(但实际上这两种方法都不够慢)。

答案 1 :(得分:0)

我同意这些意见。任何需要深层链接,书签等的东西都应该使用路由来处理。但是,如果您有类似TabView的内容或其他应该无法从URL访问的视图,并且嵌套在另一个视图中,那么在处理视图代码内部时可能更有意义。至于杂乱,您可能想要考虑将路由重组为单独的文件。以下是一些例子

Backbone general router vs. separate routing files?

Multiple routers vs single router in BackboneJs

答案 2 :(得分:0)

一般情况下,当您调用应用程序状态的急剧变化时,或者您希望维护浏览历史记录(通过backbone.history)时,会使用路由,以便用户可以返回&amp;通过浏览器按钮在状态之间。

理想情况下,您可以在不同情况下使用它们。

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