2012-12-31 164 views
3

由于骨干网提供了对某些事件做出回应的两种方式,所以我想知道一般的共识是什么。这是一个很常见的情况 - 我有一个页面上的链接,我可以设置HREF页面路由就可以使路由器可以调用一个函数来处理它,就像这样:骨干事件或路由?

HTML

<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() { 
     ... 
    } 

}); 

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

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

回答

1

如果你不关心历史或书签,活动较少副作用(人不会尝试书签他们,他们不会与你的历史干扰),他们是简单/更快地实现和处理。

性能明智的,他们稍快是也(但真的没有方法是缓慢的,足以在所有的物质)。

0

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

Backbone general router vs. separate routing files?

Multiple routers vs single router in BackboneJs

0

在一般情况下,当你调用你的应用程序的状态的急剧变化路由使用,或者你想保持浏览历史记录(通过骨干.history),因此用户可以通过浏览器按钮在状态之间导航返回&。

理想情况下,您可以在不同情况下使用两者。

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