Ошибка при уничтожении и восстановлении моделей и отрисовке подвидов у ViewCollection #153

Closed
Lapple opened this Issue Sep 4, 2013 · 6 comments

Projects

None yet

5 participants

@Lapple
Member
Lapple commented Sep 4, 2013

К примеру, мы делаем todо-лист с разбивкой задачек на категории. Есть ns.ModelCollection tasks и ns.Model task. Для них есть соответствующие вьюшки.

Есть функционал удаления и восстановления целых групп задач. При удалении мы уничтожаем (ns.Model.destroy) коллекцию и каждую задачку по отдельности. Виды пока нет возможности удалять, поэтому их не удаляем.

При удалении и восстановлении группы задач наблюдается следующее поведение:

  1. Уничтожаем коллекцию tasks и вложенные подмодели. Они удаляются из кешей. При этом у экземпляра ViewCollection есть в view.models ссылка на невалидную обнуленную модель. Кроме того во вложенных видах есть ссылки на невалидные вложенные подмодели.
  2. После восстановления пытаемся отобразить удаленную категорию, ns.Update забирает у ViewCollection невалидную коллекцию и обновляет ее. Внутри модели tasks пришедшие данные сплитятся на новые подмодели. Получается, что на этот момент у нас есть по две копии (модели с одинаковыми параметрами) для каждой из подмоделей task. Правильная сидит в _cache после сплита, а неправильная – осталась в экземпляре вида task в view.models.
  3. Соответственно в при отрисовке вложенного вида для task обновленная модель не вставляется и он продолжает рисоваться по старой обнуленной модели.
@chestozo
Member
chestozo commented Sep 4, 2013

Может быть стоит view подписать на события своих моделей?
И когда те удаляются — удалять свою ссылку?

@doochik
Member
doochik commented Sep 4, 2013

Да, надо что-то типа этого. Я пока думаю

@yanann11
Contributor
yanann11 commented Sep 4, 2013

Может лучше сделать удаление самих view? Зачем хранить view, которая зависит от модели, которая была удалена..

@doochik
Member
doochik commented Sep 4, 2013

Одно другое не отменяет.
Удаление view - это большая задача "сделать garbage collector"

@edoroshenko
Contributor

Enjoy Pull Request #159!

@edoroshenko
Contributor

вроде разрулилось в pull-request'е

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment