Ember数据 - 保存记录损失有很多关系

del*_*wyn 15 ember.js ember-data

我在使用Ember Data Fixture Adapter时遇到了问题.保存记录时,所有记录的所有关联都将丢失.我创建了一个简单的JS Bin来说明这个问题:http://jsbin.com/aqiHUc/42/edit

如果您编辑任何用户并保存,则所有项目都会消失.

这是使用Ember 1.0.0和最新的Ember Data canary版本.

我不确定我做错了什么,或者这是否与Ember Data有关.

谢谢

del*_*wyn 10

为了回答我的问题,DS.JSONSerializer.serializeHasMany似乎只处理和序列化manyToNone和manyToMany关系类型.您可以通过为模型使用自定义序列化程序来覆盖此行为:

var get = Ember.get;
App.UserSerializer = DS.RESTSerializer.extend({
  serializeHasMany: function(record, json, relationship) {
    var key = relationship.key;

    var relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);

    if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany' || relationshipType === 'manyToOne') {
      json[key] = get(record, key).mapBy('id');
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

仍然不太确定这是否是一个错误,或者这是否是期望/预期的行为.


mat*_*rns 7

我遇到了同样的问题并找到了同样的解决方案.当然这是ember-data中的一个错误?

这是我的解决方案,唯一的区别是我正在修改JSONSerializer,而不是扩展RESTSerializer因为我正在使用本地存储适配器:

DS.JSONSerializer.reopen({
    serializeHasMany : function(record, json, relationship) {
        var key = relationship.key;

        var relationshipType = DS.RelationshipChange.determineRelationshipType(
                record.constructor, relationship);

        if (relationshipType === 'manyToNone'
                || relationshipType === 'manyToMany'
                || relationshipType === 'manyToOne') {
            json[key] = Ember.get(record, key).mapBy('id');
            // TODO support for polymorphic manyToNone and manyToMany
            // relationships
        }
    }
});
Run Code Online (Sandbox Code Playgroud)