将模型创建为嵌入式hasMany关系的正确方法

时间:2013-02-05 03:14:41

标签: ember.js ember-data

如何在嵌入式hasMany关系中创建模型的新实例而不在提交时发送单独的请求?

这就是我目前正在做的事情。 我的模特:

 AUI.TableMetadata = DS.Model.extend({
    name: DS.attr('string'),
    fields: DS.hasMany('AUI.FieldMetadata')
});

AUI.FieldMetadata = DS.Model.extend({
    name: DS.attr('string'),
    table: DS.belongsTo('AUI.TableMetadata')
});

商店设置:

Adapter = DS.RESTAdapter.extend();

Adapter.map(AUI.TableMetadata, {
    fields: { embedded: 'always'},
});

AUI.store = DS.Store.create({
  revision: 11,
  adapter: Adapter.create({}),
});

创建记录:

var table = AUI.TableMetadata.createRecord({
    name: 'Cool Creatures',
    fields: []
});

var field = AUI.Field.createRecord({
    name: 'octopi',
});

table.get('fields').pushObject(field);
table.get('transaction').commit();

当我提交表时,表格帖子正确地嵌入数据,但它也为每个子字段发送单独的请求404s并将子模型置于错误状态。

1 个答案:

答案 0 :(得分:0)

Ember Data 1.0.0 beta中的DS.Model的新语法

AUI.TableMetadata = DS.Model.extend({
    name: DS.attr('string'),
    field_metadata: DS.hasMany('field_metadata')
});

AUI.FieldMetadata = DS.Model.extend({
    name: DS.attr('string'),
    table_metadata: DS.belongsTo('table_metadata')
});

在控制器或路线内

this.store.createRecord('field_meta', { name: 'octopi' });
this.store.createRecord('table_meta', { name: 'Cool Creatures' });

我不确定Ember是否与检测Rails之类的复数一样好,因此您可能必须将field_metadata命名为field_metadatas。当然,在创建记录的对象中,您必须添加适当的ID(field_metadata_idtable_metadata_id)才能使关系正常工作。