2012-12-20 245 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' –