3

我正在使用 Ember-Data beta 3。我的 Ds.models 类似于以下内容:

App.Item = DS.Model.extend({
  itemName: DS.attr('string'),
  strategy: DS.belongsTo('strat')
});

App.Strat = DS.Model.extend({
    stratName: DS.attr('string'),
    items: DS.hasMany('item',{async:true})
});

使用 Ember-data 的 RESTAdapter,我可以使用服务器中的数据填充模型。但是当我尝试将数据持久化回服务器时,没有发送任何“App.Item”记录。我的服务器收到的 JSON 只包含“stratName”。我使用“this.get('model').save()”来触发发送。

我究竟做错了什么?

4

3 回答 3

2

您在模型之间使用异步关系是否有原因?

如果您将它们设置为 {embedded: always},您可以轻松覆盖 serializeHasMany 函数以包含所有相关的模型信息

serializeHasMany: function(record, json, relationship) {
    var hasManyRecords, key;
    key = relationship.key;
    hasManyRecords = Ember.get(record, key);
    if (hasManyRecords && relationship.options.embedded === "always") {
        json[key] = [];
        hasManyRecords.forEach(function(item, index) {
            // use includeId: true if you want the id of each model on the hasMany relationship
            json[key].push(item.serialize({ includeId: true }));
        });
    } else {
        this._super(record, json, relationship);
    }
},
于 2014-03-31T18:49:01.713 回答
0

您没有做错任何事情, save 仅保存该特定记录。

但是,它应该发送相关项目的 id,这不会发生吗?

于 2013-11-09T17:11:54.567 回答
0

您必须在适配器中覆盖 serializeHasMany 并将此适配器用于模型或应用程序,这是一个咖啡脚本示例:

App.LMSSerializer = App.ApplicationSerializer.extend

  serializeHasMany: (record, json, relationship) ->
    key = relationship.key
    jsonKey = Ember.String.singularize(key) + '_ids'

    json[jsonKey] = []

    record.get(key).forEach( (item) ->
      json[jsonKey].push(item.get('id'))
    )
    return json
于 2013-11-15T14:50:29.980 回答