2014-02-26 95 views
0

我一直在工作應用程序中使用EmberModel一段時間,現在想要移回使用EmberData。我從Ember網站的「模型指南」文檔中注意到,在EmberData模型中定義hasMany關係的正確方式已經改變。在早期版本的EmberData的,我定義我的模式是這樣的:EmberData模型定義更改

App.StratItem = DS.Model.extend({ 
    id: DS.attr('string), 
    name: DS.attr('string'), 
    quantity: DS.attr('number'), 
    type: DS.attr('string'), 
    strategy: DS.belongsTo('strat') 
}); 

App.Strat = DS.Model.extend({ 
    id: DS.attr('string'), 
    stratName: DS.attr('string'), 
    sDate: DS.attr('number'), 
    eDate: DS.attr('number'), 
    stratItems: DS.hasMany('stratItem',{async:true}) 
}); 

如果我正確解讀當前文檔,對於同一型號的正確定義現在應該是:

App.StratItem = DS.Model.extend({ 
    id: DS.belongsTo('strat') 
    name: DS.belongsTo('strat') 
    quantity: DS.belongsTo('strat') 
    type: DS.belongsTo('strat') 
}); 

App.Strat = DS.Model.extend({ 
    id: DS.attr(), 
    stratName: DS.attr(), 
    sDate: DS.attr(), 
    eDate: DS.attr(), 
    stratItems: DS.hasMany('stratItem') 
}); 

這裏是我的問題:

1)我對文檔的解釋是否正確?

2)如果是,在'StratItem'中已經指定整個'StratItem'模型(即所有變量)是兒童的情況下,爲「StratItem」中的每個變量指定「belongsTo」 'Strat'?

3){async:true}仍然有必要嗎?

我在Ember(版本1.0 rc)和Ember Data的早期版本中使用的代碼上收到了來自Ember的「加載路由時出現錯誤」錯誤消息;上述變化是我迄今爲止唯一的變化。

回答

0

不知道,你糊塗了,但你不應該定義屬性的belongsTo關係:

App.StratItem = DS.Model.extend({ 
    name: DS.attr(), 
    quantity: DS.attr(), 
    type: DS.attr(), 
    strategy: DS.belongsTo('strat') 
}); 

App.Strat = DS.Model.extend({ 
    id: DS.attr(), 
    stratName: DS.attr(), 
    sDate: DS.attr(), 
    eDate: DS.attr(), 
    stratItems: DS.hasMany('stratItem') 
}); 

id: DS.attr(),是不必要的。 Ember數據自動執行此操作。

{async:true}只有在您沒有側載您的相關數據時纔有必要。

+0

請查看「模型」的Ember指南中的「顯式反轉」部分http://emberjs.com/guides/models/defining-models/ 似乎表明我需要指定「 belongsTo「中的屬性 - 不是嗎? – ptmoy2

+0

只有當你有多個'belongsTo/hasManys'具有多個相同類型。你有每一個。 – claptimes

+0

文檔中的這一部分真的讓我感到困惑。是App.Comment的文檔屬性中提到的onePost,twoPost,redPost和bluePost? – ptmoy2