2015-06-19 245 views
0

我有一個包含4個Model類的rails應用程序,每個表中有多個實例。我在CoffeeScript中創建了骨幹模型和集合類來匹配。我可以成功加載所有的集合,並可以在視圖中呈現它們。到現在爲止還挺好。這裏是我的收藏品之一,與其相關的模型:將模型添加到骨幹集合

class window.CoffeeWater.Collections.Histories extends Backbone.Collection 
url: '/api/histories' 
model: History 

class window.CoffeeWater.Models.History extends Backbone.Model 

我需要能夠創造一個歷史模型對象,然後將其添加到收藏史。該文件指出,我必須在創建新模型時設置'collection'屬性,以便從集合中獲取'url'屬性。我的問題是,我似乎無法正確設置「收集」屬性值,因爲url屬性沒有得到的模型實例

attributes = {'start_time': new Date (1434740259016), 'stop_time': new Date (1434740259016 +(86400*1000)), 'valve_id': 2} 
options = { collection: window.CoffeeWater.Collections.Histories } 
history = new window.CoffeeWater.Models.History(attributes, options) 
window.CoffeeWater.Objects.Collections.Histories.add(history) 

設置檢查所產生的「歷史」對象不顯示相同已存在於集合中的模型中存在的屬性,並且url屬性丟失。

我目前處於虧損狀態。有沒有人有如何做到這一點的例子? backbone.js文檔沒有顯示任何相關示例。

回答

0

模型中的url定義方式如下。

如果模型中有一個url屬性。

class window.CoffeeWater.Models.History extends Backbone.Model 
url:'/api/history/1' 

然後當model.fetch(),它會調用該url。如果找不到此屬性,它將會看到關聯的集合是否有'url'。您嘗試設置此收藏變量。

你缺少的是這個。這

class window.CoffeeWater.Collections.Histories extends Backbone.Collection 

實際上是一個類的定義。這還不是一個對象。你需要初始化它,就像你在java中一樣。所以

var historyCollection=new window.CoffeeWater.Collections.Histories() 

現在你有一個集合對象。當你做

historyCollection.add(history); 

該模型的「集合」被自動設置爲「historyCollection」對象,其中包含「URL」。所以實際上,你不需要手動把它放在選項中。

基本上

attributes = {'start_time': new Date (1434740259016), 'stop_time': new Date (1434740259016 +(86400*1000)), 'valve_id': 2} 
var historyCollection=new window.CoffeeWater.Collections.Histories() 
var history = new window.CoffeeWater.Models.History(attributes) 
historyCollection.add(history)