【问题标题】:Backbone Events or Routes?骨干事件或路由?
【发布时间】:2012-12-15 18:43:26
【问题描述】:

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

HTML

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

JS

var AppRouter = Backbone.Router.extend({ 路线:{ “帖子/:id”:“getPost” } });

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

var MyView = Backbone.View.extend({ ... 事件:{ "点击 .handleInView": "打开", }, ... 打开:函数(){ ... } });

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

我的路线可能是一个我可以看到所有交互的地方,但它也可能很快变得混乱。

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

    在性能方面,它们也稍快一些(但实际上这两种方法都慢到根本不重要)。

    【讨论】:

      【解决方案2】:

      我同意 cmets。任何需要深度链接、书签等的东西都应该使用路由来处理。但是,如果您有 TabView 之类的东西,或者应该无法从 URL 访问的另一个视图,并且嵌套在另一个视图中,那么在视图代码内部处理它可能更有意义。至于混乱,您可能需要考虑将您的路线重新组织到单独的文件中。下面是一些例子

      Backbone general router vs. separate routing files?

      Multiple routers vs single router in BackboneJs

      【讨论】:

        【解决方案3】:

        一般来说,当您调用应用程序状态的剧烈变化时,或者您想维护浏览历史记录(通过主干.history),以便用户可以通过浏览器按钮。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-31
          • 1970-01-01
          相关资源
          最近更新 更多