2013-04-12 59 views
0

我要查询返回响应中嵌入对象的API,所以我使用fixture适配器来模拟这个。我的数据是这样的:带有嵌入对象的Ember.js模型

App.Deal.FIXTURES = [ 
     {id: 1, name: 'Deal 1', closed_time: '2012-04-01', value_in_cents: 342345, company: { id: 1, name: 'Google' }, user: { id: 2, full_name: 'Bob Smith' } }, 
     {id: 2, name: 'Deal 2', closed_time: '2012-04-01', value_in_cents: 342345, company: { id: 1, name: 'Google' }, user: { id: 2, full_name: 'Bob Smith' } } 
] 

这里是我的模型:

App.Deal = DS.Model.extend({ 
    name: DS.attr('string'), 
    value_in_cents: DS.attr('number'), 
    closed_time: DS.attr('date'), 
    user: DS.belongsTo('App.User'), 
    company: DS.belongsTo('App.Company') 
}); 

App.User = DS.Model.extend({ 
    full_name: DS.attr('string') 
}); 

App.Company = DS.Model.extend({ 
    name: DS.attr('string') 
}); 

我不确定如何在usercompany对象获得。我通过控制台看到数据:

App.Deal.find(1) 
Class {store: Class, clientId: 2, _relationshipChanges: Object, _changesToSync: Object, id: "1"…} 
__ember1365792240874: "ember329" 
__ember1365792240874_meta: Meta 
_changesToSync: Object 
_data: Object 
attributes: Object 
belongsTo: Object 
company: Object 
id: 1 
name: "Google" 
__proto__: Object 

但我不能做App.Deal.find(1).get('user')。我错过了什么吗?

+0

这似乎是[这个问题](http://stackoverflow.com/questions/14174921/embedded-hasmany-attribute-access-gives-typeerror的副本-cannot-call-method-hasownpr),或者上下文非常相似 – MilkyWayJoe

+0

Ah..ok。配置适配器似乎像这样工作:http://stackoverflow.com/questions/14320925/how-to-make-embedded-hasmany-relationships-work-with-ember-data/14324532#14324532 – brandonhilkert

回答

3

下面的设置工作:

App.Adapter = DS.FixtureAdapter.extend(); 

App.Adapter.map('App.Deal', { 
    user: {embedded: 'load'}, 
    company: {embedded: 'load'} 
}); 

App.User = DS.Model.extend({ 
    full_name: DS.attr('string') 
}); 

App.Company = DS.Model.extend({ 
    name: DS.attr('string') 
}); 

App.Deal = DS.Model.extend({ 
    name: DS.attr('string'), 
    value_in_cents: DS.attr('number'), 
    closed_time: DS.attr('date'), 
    user: DS.belongsTo(App.User, {embedded: 'load'}), 
    company: DS.belongsTo(App.Company, {embedded: 'load'}) 
});