4

我假设如果 ember-data 中的模型包含与第二个模型相关的 id,那么根据我在 github 上创建的问题,该 id 也可用于建立与第二个模型对象的 belongsTo 关系。显然情况并非如此。

有谁知道在 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
4

2 回答 2

2

当您想要从 REST API 加载/保存数据时,关联对象的 ID 很有用。然后您可以使用 RESTAdapter 并发送相关对象的 ID。

例如,对于一个belongsTo关系,ember-data 假设您将发送一个model_b_id带有相关对象 ID 的键。然后 ember-data 将处理此对象的加载,通常通过调用 API :GET model_b/the_id

也可以通过嵌入它们而不是通过 id 给出引用来加载关联的对象。

有关更多示例,请参阅有关 StackOverflow 和 ember-data 项目中的示例/测试的其他问题。

于 2013-03-07T17:49:43.750 回答
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}}

有效且默认情况下,Ember Data 将“_id”(对于任何 belongsTo 关系)添加到 decamelized 属性名称上,或者将“_ids”添加到任何 hasMany。

于 2013-03-13T16:28:37.453 回答