【问题标题】:how to get Ember-Data RESTAdapter to send "hasMany" records to server如何让 Ember-Data RESTAdapter 将“hasMany”记录发送到服务器
【发布时间】:2013-11-09 02:48:48
【问题描述】:

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

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()”来触发发送。

我做错了什么?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

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

    如果您将它们设置为 {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);
        }
    },
    

    【讨论】:

      【解决方案2】:

      你没有做错任何事,save 只保存特定的记录。

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

      【讨论】:

      • 不,没有发送ID;关于为什么的任何猜测?另外,我如何让 Ember-Data 自己发送实际的 hasMany 记录?
      【解决方案3】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多