Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ns.View] проблема инвалидации моделей на ns-view-hide #564

Open
Rebulus opened this issue Jun 25, 2015 · 5 comments
Milestone

Comments

@Rebulus
Copy link
Contributor

Rebulus commented Jun 25, 2015

Предположим, что у нас есть следующий лайаут приложения:

ns.layout.defined({
    'app': {
        'boxItem@': {
            'itemView': {}
        },
        'itemCheckerCollection': {}
    }
});

Приложение выводит в бокс элемент, выбранный в из списка коллекции itemCheckerCollection.

И itemView и элемент коллекции itemCheckerCollection зависят от одной и той же модели.

Предположим, что мы изменяем выводимый элемент коллекции, задавая новые параметры страницы и вызывает ns.page.go(). Формируется новый HTML страницы, в котором все элементы коллекции были валидны и их не нужно перерисовывать. Вызывается ns-view-hide у неактуального itemView.

При обработке этого события мы инвалидируем модель, с которой связан элемент коллекции itemCheckerCollection.

Данный действие приводит к ошибке, т.к. дальнейший обход дерева HTML не может найти новый элемент для невалидной вью коллекции itemCheckerCollection (напомню, что на момент формирования дерева HTML все элементы коллекции itemCheckerCollection были валидны).

Нужно как-то разрешить эту проблему, чтобы дерево HTML всегда было актуально для каждой фазы обработки.

@doochik
Copy link
Contributor

doochik commented Jun 25, 2015

Как работает сейчас:

  1. Запрашиваем модели
  2. Рендерим html
  3. Вызываем hide/htmldestroy
  4. Вставляем новый html в DOM
  5. Вызываем htmlinit/show/...

Проблема в том, что hide вызывается после отрисовки html, поэтому и проблема.

Как можно попробовать переделать:

  1. Вызываем hide/htmldestroy + делаем отписку событий от видов, т.е. подготавливаем вид к скрытию
  2. Запрашиваем модели
  3. Рендерим html
  4. Вставляем новый html в DOM
  5. Вызываем htmlinit/show/...

@doochik doochik added this to the v0.7.3 milestone Jun 25, 2015
@doochik
Copy link
Contributor

doochik commented Jul 29, 2015

Сделал прототип. И тут мы приносим еще одну проблему - если обновление завершилось неудачно. То страница становится нерабочей, потому что виды уже от всего отписались и фактически стали нерабочими

@Rebulus
Copy link
Contributor Author

Rebulus commented Jul 30, 2015

Речь о том, что запрос моделей может пройти неудачно?

@doochik
Copy link
Contributor

doochik commented Jul 31, 2015

Ага

@doochik
Copy link
Contributor

doochik commented Jul 31, 2015

Прото: #566

@doochik doochik modified the milestones: v0.7.3, v0.8.1 Jul 31, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants