2011-12-05 65 views
16

我有一個項目列表並點擊它們應該爲其帶來用戶細節(另一種觀點)。 在我的路由器我有這這樣的路線:在帶有ID的骨幹模型中獲取

'details/:id' : 'details', 

現在,在細節功能我要取我的對象(在抓取會引發新的視圖渲染)。 但是我該怎麼做,以便骨幹附加物品id到model.url? 2方面我現在是:

在飛行中進行讀取時創建網址:

this.realty_object.fetch({url: SITE_PATH + 'blah/blah/' + id}); 

而且這樣的事情:

this.realty_object 
    .set({id : id}, {silent: true}) 
    .fetch(); 

但我懷疑,這是正確的解決方案。它應該如何? model.urlRoot和model.url()之間的區別是什麼?

回答

34

正確的答案是使用模型urlRoot財產。如果設置了,模型ID將在獲取時附加到此網址。因此,它可能是這樣的(對象有從什麼是我的第一篇文章,但想法是一樣不同的名字 - 獲取由ID單一模式):

Group = Backbone.Model.extend({ 
    urlRoot: SITE_PATH + 'group/index', 
}); 

而且在路線:

this.group = new Group({id: id}); 
this.group.fetch(); 
+2

這是好吧,除非你想保持模型實例不變,但只是在空白狀態和填充狀態之間移動它(例如:登錄/註銷用戶)。在這種情況下,我可以找到的最佳解決方案是OP的'.set',其中'silent:true'爲id。 – SimplGy

+0

您還應將'silent:true'傳遞給模型構造函數的選項散列,以避免模型在提取時被標記爲髒: 'this.group = new Group({id:id},{silent:true}) ;' – Burgi

0

看看在這裏, 它解釋得很清楚什麼更好的解決方案之一是取單車型

你會使用一個功能放在一起的URL,作爲模型屬性。使用.isNew() 至少這是我一直這樣做了一段時間,我相信它比每次你需要的東西時獲取一個url中建立一個更好。

How do I fetch a single model in Backbone?