我曾假设如果ember-data中的模型包含与第二个模型相关的id,那么id也可以用于建立与第二个模型对象的belongsTo关系,根据我创建的问题{{3 }}。显然情况并非如此。
有没有人知道在ember-data存储中存在的两个对象之间的关系需要彼此相关的环境?是否必须同时加载相关对象? (或者在RESTAdapter的情况下通过相同的请求),以便id引用工作?如果它们没有通过相同的请求,那么无论如何都要在以后的请求中建立该关系而不必为寻找关系并手动设置它们的请求添加事件处理程序?以下是我看到的问题的一个例子:
App.ModelA = DS.Model.extend({
name: DS.attr('string'),
modelBId: DS.attr('number'),
modelB: DS.belongsTo('App.ModelB')
});
App.ModelB = DS.Model.extend({
name: DS.attr('string')
});
App.ModelB.find(2); // returns an object
modelA.get('modelBId'); // returns 2
modelA.get('modelB'); // returns null
答案 0 :(得分:2)
当您想要从REST API加载/保存数据时,关联对象的ID很有用。然后,您可以使用RESTAdapter并发送相关对象的ID。
例如,对于belongsTo
关系,ember-data假定您将发送一个带有相关对象ID的密钥model_b_id
。然后,ember-data将通常通过调用API来处理此对象的加载:GET model_b/the_id
也可以通过嵌入它们来加载相关对象,而不是通过id给出引用。
有关更多示例,请参阅有关StackOverflow和ember-data项目中的示例/测试的其他问题。
答案 1 :(得分:2)
亚当,
我自己开始使用Ember Data,而且混淆通常是由于REST API的许多自动化/假设。尝试:
App.ModelA = DS.Model.extend({
name: DS.attr('string'),
modelB: DS.belongsTo('App.ModelB')
});
REST API返回的模型A如下:
{"model_a":{"name": "Adam", "model_b_id": 2}}
有效且默认情况下,对于任何belongsTo关系,Ember Data将'_id'添加到decamelized属性名称,或将'_ids'添加到任何hasMany。