2015-09-17 118 views
0

我在玩Rails應用程序,該應用程序使用Backbone處理不同頁面上的一些數據,我在獲取集合和創建新模型方面沒有任何問題,但我無法從一個模型中獲取單個模型服務器爲了執行,比如顯示或編輯。我想聲明urlRoot按照其他類似的問題在這裏找到在SO答案:獲取單個骨幹模型

class Entities.Product extends Backbone.Model 
    urlRoot: -> 
    if @isNew 
     '/products/' 
    else 
     '/products/' + @id 

我使用以下路線開始顯示:

class ProductsUnit.Router extends Marionette.AppRouter 
    appRoutes: 
    "products/:id" : "showProduct" 

API = 
    showProduct: (id) -> 
    ProductsUnit.Show.Object.showProduct() 

在代碼中,我後來請求產品的單一實體:

Show.Object = 
    showProduct: (id) -> 
     product = App.request "product:entity" 

請求然後由下面的處理程序處理:

App.reqres.setHandler "product:entity", -> 
    API.getSingleProduct id 

它觸發一個取的單品:

getSingleProduct: (id) -> 
    product = new Entities.Product 
    id: id 
    product.fetch() 
    product 

據我瞭解,我可以從路由本身"products/:id"傳遞一個id到的功能鏈,最終將獲取模型和urlRoot將爲/products/+ @id,其中this將表示最初從路線中獲取的ID。但它似乎並不是這種情況,因爲在成功isNew返回爲true,即使我試圖通過ID來使它false

getSingleProduct: (id) -> 
    product = new Entities.Product 
    id: id 
    product.fetch success: -> 
    console.log product.isNew() 
    return 
    product 

我對Backbone和Javascript都很新,所以在我看邏輯的時候可能會有一個關鍵的缺陷。任何指導將非常感激,我一直堅持這個很簡單的問題已經有幾天了。

回答

0

我認爲你已經交換了你的urlRoot邏輯:當一個模型isNew它還沒有id呢。

所以它應該是:

urlRoot: -> 
    if @isNew 
     '/products/' 
    else 
     '/products/' + @id 
+0

感謝您的回覆!但除此之外,Backbone假定我試圖獲取'isNew'的模型是真實的,儘管我傳遞了一個id屬性 - 'id:id'。 Backbone調試器顯示存在一個URL爲「/ products /」的模型,該模型在其屬性中包含整個現有模型堆棧。我提取模型的方式有什麼錯誤嗎? –

+0

我也根據你的觀察更新了這個問題。 –