EmberFire Data Relationships не обновляются корректно

ОБНОВЛЕНИЕ: Ниже приведен оригинальный пост, касающийся отношений данных Ember, который, как мне кажется, больше связан с проблемой адаптера EmberFire и обработкой записей массива hasMany. Кажется местный store в Ember Data обновляется соответствующим образом, однако эти записи не помещаются в соответствующую базу данных Firebase после обновления хранилища.

Я добавил теги emberfire и firebase, чтобы надеяться найти ответ в этом сообществе. Любая помощь приветствуется, и я рад предоставить дополнительную информацию по мере необходимости.


У меня есть две модели, которые определены с отношениями hasMany и ownTo. Вот первая модель "рамки":

// -- Frameworks Model
import DS from 'ember-data';
const { attr, hasMany } = DS;

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    questions: { serialize: 'ids' }
  } 
});

export default DS.Model.extend({
  name: attr('string'),
  reports: hasMany('report'),
  questions: hasMany('question', {async: true}),
  includedFramework: attr('string'),
  reportOnlyOnce: attr('string', { defaultValue: false }),
  frameBuilder: attr('string', {defaultValue: "none"}),
  createdAt: attr('string'),
  createdBy: attr('string'),
  updatedAt: attr('string'),
  updatedBy: attr('string')
});

И вторая "вопросная" модель:

// -- Question Model
import DS from 'ember-data';
const { attr, hasMany, belongsTo } = DS;

export default DS.Model.extend({
  framework: belongsTo('frameworks', {async: true}),
  detail: attr('string'),
  type: attr('string'),
  createdAt: attr('string'),
  createdBy: attr('string'),
  position: attr('number'),
  options: hasMany('option')
});

На своем маршруте я добавляю модель для фреймворка (в данном случае определяя идентификатор модели для тестирования):

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    let id = params.report_id;
    var self = this;

    return Ember.RSVP.hash({
      report: this.store.find('report', id),
      general: this.store.find('frameworks', '-KITSAxjdE5TiVdk-aPC')
    })
  }
});

По какой-то причине в этой структуре хранится массив вопросов, содержащий 4 из 6 различных "вопросов", которые должны ему принадлежать. Я не знаю, почему 4 из них хранятся в модели фреймворка, а 2 из них - нет. В моем шаблоне для страницы:

   {{#each model.general.questions as |question|}}

      {{#paper-item class="md-1-line"}}
        <p class="question">
          {{question.detail}}
        </p>
        <p class="option">
          {{#if (eq question.type "text")}}
            {{paper-input value=question.id onChange=(action (mut question.id))}}
          {{/if}}
        </p>

      {{/paper-item}}

{{#each model.general.questions as |question|}} отлично подходит для 4 вопросов, которые на самом деле хранятся в модели структуры для этого идентификатора, но не для других 2. Остальные 2 вопроса имеют отношение ownTo, ссылающееся на правильную структуру.

Я попытался добавить сериализатор в модель фреймворка (как вы можете видеть выше), но не было никаких изменений.

Я также попытался вручную добавить вопрос в хранилище фреймворков при создании нового вопроса с помощью:

framework.get('questions').then(function(question) {
  return question.pushObject(newQuestion);
 })

но без изменений тоже.

Любые мысли приветствуются, я рад также предоставить любые другие соответствующие фрагменты кода.

1 ответ

Решение

Эта проблема, похоже, связана с тем, как EmberFire реагирует на модели с belongsTo а также hasMany отношения, где "родительская" модель с hasMany ссылка на дочерние модели не обновляется автоматически, когда child модель создана.

На GitHub была отправлена ​​проблема, чтобы продолжить расследование, как решить эту проблему: https://github.com/firebase/emberfire/issues/412

Другие вопросы по тегам