ember data: Вручную отправить модель в обновленное состояние

У меня есть модель ember-data (родительская), которая имеет несколько встроенных моделей в качестве свойств. Когда я обновляю массив встроенных моделей hasMany, родитель не переходит в обновленное/грязное состояние. Как я могу вручную отправить родителя в грязное состояние?

Я пробовал следующее без везения:

parent.set('isDirty', true);
parent.get('stateManager').goToState('dirty')
parent.get('stateManager').goToState('updated.uncommitted')

person manuel_mitasch    schedule 17.05.2012    source источник
comment
Просто вопрос... Как вы обнаруживаете изменения в массиве встроенных моделей hasMany?   -  person ThomasDurin    schedule 06.09.2012
comment
У меня была точно такая же проблема (за исключением того, что мои отношения не были встроены). Спасибо за вопрос и ответ! Это похоже на ошибку, не так ли? Если вы обновляете родительский массив hasMany, он должен быть помечен как грязный. Может быть, он просто обновляет дочерний элемент новым родителем, и его нужно сохранить? В моем случае родительский hasMany имеет нулевую инверсию (дочерний элемент не имеет родительских отношений). Может дело в этом?   -  person KOGI    schedule 05.06.2013
comment
@ThomasD Вы можете добавить метод наблюдателя, который наблюдает за [email protected] или myHasMany.length   -  person KOGI    schedule 05.06.2013
comment
Извините, я не в курсе текущей ситуации. С тех пор, как я опубликовал сообщение (более года назад), в данных Ember произошли серьезные изменения. Мое первое предположение состоит в том, что без инверсии ребенок не знает о родителе, поэтому не может пометить родителя как грязный. Следовательно, вам нужно позаботиться о себе. Ember может предложить некую магию для решения этой проблемы, о которой я не знаю... Если вам интересно, вы можете получить непосредственную помощь на форуме ember по адресу обсудить.emberjs.com   -  person manuel_mitasch    schedule 06.06.2013


Ответы (2)


Если вы используете Ember data (v1.0.0 > x).

parent.get('stateManager').goToState('updated')

Больше не работает. Теперь вы должны использовать:

parent.transitionTo('updated');

Это иерархия допустимых состояний, которые поставляются с данными Ember:

* root
  * deleted
    * saved
    * uncommitted
    * inFlight
  * empty
  * loaded
    * created
      * uncommitted
      * inFlight
    * saved
    * updated
      * uncommitted
      * inFlight
  * loading

Источник состояний

person esbanarango    schedule 16.01.2015

Наконец нашел решение сам:

parent.get('stateManager').goToState('updated')

Я также должен упомянуть, что при добавлении ассоциации ownTo к дочернему элементу родитель будет испорчен, если ассоциация hasMany будет изменена. Но мне все еще нужно ручное загрязнение для случая, когда изменяется обычное свойство ребенка.

person manuel_mitasch    schedule 20.05.2012