由于骨干提供了两种回应某些事件的方式,我想知道普遍的共识是什么。这是一种非常常见的情况 - 我在页面上有一个链接,我可以在页面上设置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() { ... } });
我知道路线为您提供历史和直接链接的额外好处,但从性能角度和代码布局的角度来看,如果我不关心历史,那么更好的方法是什么。
我的路线可能是一个单独的地方,我可以看到所有的互动,但它也可能很快就会混乱。
答案 0 :(得分:1)
如果您不关心历史记录或书签,事件的副作用较少(人们不会尝试将它们加入书签,并且不会干扰您的历史记录),并且它们的实施和处理更简单/更快捷。
在性能方面,它们也稍微快一点(但实际上这两种方法都不够慢)。
答案 1 :(得分:0)
我同意这些意见。任何需要深层链接,书签等的东西都应该使用路由来处理。但是,如果您有类似TabView的内容或其他应该无法从URL访问的视图,并且嵌套在另一个视图中,那么在处理视图代码内部时可能更有意义。至于杂乱,您可能想要考虑将路由重组为单独的文件。以下是一些例子
答案 2 :(得分:0)
一般情况下,当您调用应用程序状态的急剧变化时,或者您希望维护浏览历史记录(通过backbone.history)时,会使用路由,以便用户可以返回&amp;通过浏览器按钮在状态之间。
理想情况下,您可以在不同情况下使用它们。
我喜欢根据页面上的变化来考虑它。如果一般页面状态相同,但某些元素正在更改或更新,我将使用事件。如果一般页面状态正在改变,或者我正在加载不同的UI屏幕,我将使用路由。