Как сделать родительский грязным, когда я изменяю hasMany/belongsTo отношения в Ember-Data?

Моя основная проблема с Ember Data, прямо сейчас, заключается в том, что когда я меняю отношения (hasMany или принадлежит To), родительский элемент не загрязняется.

Мне нужно это, потому что:

  • В зависимости от свойства isDirty отображается кнопка сохранения/отмены
  • hasMany и принадлежит к идентификаторам, отправленным с родителем, поэтому родитель на самом деле грязный.

Кроме того, когда я откатываюсь от родителя, возвращаются только отношения belongsTo. Модели hasMany остаются неизменными.

Я нашел эту проблему, в которой говорится об dirtyRecordsForHasManyChange -объекте, но это, похоже, не существует в Ember Data v1 ( v1.0.0-beta.3, что я и использую).

Как я могу это сделать?

Спасибо.

Ответ 1

Для a принадлежит ToI добавил наблюдателя.

Например, у меня есть Человек с принадлежностью к провинции. В моей форме у меня есть выбор для провинций. В модели Person я добавляю этого наблюдателя...

provinceChanged: function() {
  this.send('becomeDirty');
}.observes('province')

Я тоже в зависимости от isDirty для отображения/скрытия кнопок "Сохранить/Отмена", и пока этот наблюдатель отлично справляется с тем, чтобы отметить запись как грязную, если я нажму "отменить", я делаю откат, но мне также нужно отметить запись чистый. Я делаю это в контроллере Person по моему действию отмены.

cancel: function() {
  this.get('model').rollback();
  this.set('isEditing', false);
  this.get('model').adapterWillCommit();
  this.get('model').adapterDidCommit();
}

Все это работает хорошо.

Для hasMany в другом проекте мы использовали вычисляемое свойство на контроллере.

isThisOrChildrenDirty: function() {
  return this.get('isDirty') || this.get('authors').get('isDirty');
}.property('isDirty','[email protected]')

Затем вместо проверки isDirty мы проверяем isThisOrChildrenDirty.

Надеюсь, что это поможет.

Ответ 2

this.get('model').send('becomeDirty');

Это должно сделать этот трюк. Просто отправьте wasDirty в родительскую модель.