Как откатить ошибки проверки нокаута?

Я использую нокаут-валидацию 2.0.3 с entity framework 6.0 и получаю неожиданные ошибки валидации. Вот мой рабочий процесс:

Шаг 1: (работает, как ожидалось) Создайте новую сущность с помощью диалогового окна добавления и попытайтесь сохранить новую сущность. Ошибки проверки отображаются из-за отсутствия некоторых свойств. Это желаемое поведение. Пользователь закрывает диалоговое окно, и я вызываю unitofwork.rollback (), чтобы отменить создание нового объекта.

Шаг 2: Откройте диалоговое окно редактирования для существующей сущности того же типа. Попробуй сохранить как есть. => Снова отображаются ошибки проверки из шага 1!

Как я могу удалить ошибки проверки после шага 1?

Если я выполняю только шаг 2, действие сохранения работает нормально.

В связанном вопросе stackoverflow было предложено использовать

errors.showAllMessages(false);

Это не решило мою проблему.

Связанные вопросы:


person Stefan    schedule 13.07.2016    source источник
comment
В сообщении много кода и довольно много информации о серверной стороне всего этого. Нам будет легче помочь, если вы сократите все до тех вещей, которые необходимы для воспроизведения (что также потребует добавления некоторого кода представления).   -  person Jeroen    schedule 13.07.2016
comment
В настоящее время мне сложно предоставить миниатюрный пример, и я подумал, что приведенный выше код, по крайней мере, будет лучше, чем вообще не включать код. Если мне удастся ограничить проблему, я обновлю вопрос. Я надеюсь, что у кого-то уже была похожая проблема (комбинация отката и проверки нокаута) и он может дать подсказку.   -  person Stefan    schedule 14.07.2016


Ответы (1)


Для проверки я использовал

validation.group(checkedEntity, { deep: true });

Полное дерево объектов также учитывает entityAspect проверенной сущности. EntityAspect подключен к диспетчеру сущностей. И этот диспетчер сущностей содержит старое состояние сущности.

Полный цикл:

fooInstance = ›entityAspect =› entityManager = ›entityGroupMap =› Foo: ... = ›_entities =› старый экземпляр объекта

Поэтому у меня в основном есть два варианта:

  • Не используйте {deep: true}
  • Убедитесь, что после отката в диспетчере сущностей больше нет старой сущности:

entityManager.rejectChanges ();

entityManager.clear ();

person Stefan    schedule 14.07.2016