Ember Data - сохранение потерь в памяти имеет много отношений

У меня проблема с адаптером Ember Data Fixture. При сохранении записи вся запись имеет много ассоциаций. Я создал простой JS Bin, чтобы проиллюстрировать проблему: http://jsbin.com/aqiHUc/42/edit

Если вы редактируете любого пользователя и сохраняете, все проекты исчезают.

Это использует Ember 1.0.0 и последнюю сборку данных Ember.

Я не уверен, что я делаю что-то неправильно или если это проблема с Ember Data.

Спасибо

Ответы

Ответ 1

Чтобы ответить на мой вопрос, 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');
    }
  }
});

Все еще не совсем уверен, является ли это ошибкой или это желаемое/ожидаемое поведение.

Ответ 2

Я столкнулся с той же проблемой и пришел к такому же решению. Неужели это ошибка в данных ember?

Здесь мое решение, единственное различие заключается в том, что я изменяю 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
        }
    }
});

Ответ 3

Это не ошибка, а выбор дизайна в Ember Data.

Метод JSONSerializer.serializeHasMany не сериализует manyToOne по дизайну; обычно внешний ключ сохраняется на стороне, принадлежащей стороне, и hasOne может не сохранять внешний ключ

В этом сообщении объясняется работа: http://www.toptal.com/emberjs/a-thorough-guide-to-ember-data см. раздел "Отношения" один ко многим "и" многие к одному "" взломать - заставить сериализовать идентификаторы DS.hasMany, вы можете использовать Embedded Records Mixin. например, attrs: {someRelationship: {serialize: 'ids'}}

Ответ 4

Теперь DS.RelationshipChange удаляется. Вы должны использовать record.constructor, например:

record.constructor.determineRelationshipType(relationship)

которые показывают ваш тип отношения.