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