2012-12-20 186 views
0

我正在尝试为我最新的Rails项目使用Backbone,并且我面临的最新问题是路由。骨干路由器没有正确路由“新”路由

对于我的Rails路由,我的用户在登录后进入/产品(index_products_path)。

所以,我创建了骨干下列途径。我打算为不同的“页面”(如邀请)创建其他Backbone路由器。

class Sample.Routers.ProductsRouter extends Backbone.Router 

    routes: 
    ""   : "index" 
    ":id"  : "show" 
    ":id/edit" : "edit" 
    "new"  : "newProduct" 

“mydomain.com/products”调出索引视图。 “mydomain.com/products/#/1”或“mydomain.com/products#1”显示产品ID为1的显示视图。

现在,问题是“新”路径。当我尝试通过指向“mydomain.com/products#new”来调出“新”视图时,服务器抱怨它找不到id = new的产品。

我真的不明白为什么会发生这种情况。当我追踪错误堆栈时,我可以看到正在调用Sample.Routers.ProductsRouter.ProductsRouter.show。似乎骨干路由器不是正确的路由.....并且Rails服务器正在响应“id”= new的产品的“GET”请求........它可能是某种骨干配置错误?

任何帮助将非常,非常感谢!

回答

2

骨干执行第一个匹配路由。所以在你的情况下,首先放new

routes: 
    ""   : "index" 
    "new"  : "newProduct" 
    ":id"  : "show" 
    ":id/edit" : "edit" 
+0

谢谢你,西蒙,快速回答!现在我觉得不知道很琐碎的东西很愚蠢。 :( – yangtheman

+0

无法保证这可以在任何地方(或任何地方)工作,JavaScript对象是无序的,所以你看到的任何顺序都是偶然的。如果你需要按特定顺序检查你的路由,那么你必须手动添加它们['route'](http://backbonejs.org/#Router-route)调用 –

+0

@ muistooshort按标准来看,虽然每个实际的浏览器都按照顺序依次循环一个对象(Chrome对这个有一个bug早在2008年,如果我是正确的)我认为要坚持当前的标准,最好的做法是用名字命名任何路由变量,例如'product /:id' –