yandex-ui / noscript

Noscript: JavaScript MVC Framework for building SPA
http://yandex-ui.github.io/noscript/
MIT License
34 stars 22 forks source link

Нужно событие ns-model-before-invalidate у ns.Model #612

Open chestozo opened 8 years ago

chestozo commented 8 years ago

Кажется, полезное событие. Пример полезного кейса: у нас есть модель-коллекция типа "бесконечный список" с подгрузкой по скроллу. Когда мы хотим её перезагрузить "по-жёсткому" мы сохраняем число элементов коллекции и запрашиваем ровно столько item-ов.

Было бы удобно сохранять число элементов в коллекции именно по событию типа ns-model-before-invalidate.

vitkarpov commented 8 years ago

по-жёсткому

👍

vitkarpov commented 8 years ago

А сохранять это дело перед тем как инвалидировать модельку нельзя? Или хочется типа декларативно сделать?

vitkarpov commented 8 years ago

Когда мы хотим её перезагрузить "по-жёсткому"

Вот это что за момент — как мы ее хотим перезагрузить, сделать руками invalidate?

chestozo commented 8 years ago

Сразу на твои 1 и 3 комменты ответ: по-жёсткому это значит oldModel.setData(newModelInstance.getData()) :)

Можно конечно везде, где у модели вызывается invalidate рядом вызвать saveModelsCount, но: не везде можно подобраться + удобно один раз написать такое внутри секции events при декларации модели.

vitkarpov commented 8 years ago

Ага, понял тебя. Нормальная тема.

vitkarpov commented 8 years ago

Добавим в этом таске ns-view-before-hide, раз есть кейс?

vitkarpov commented 8 years ago

Только эти события будут выбиваться из общей логики вызова пачками — нужно сделать trigger непосредственно перед скрытием ноды, а не класть ссылку на вьюшку в очередь, чтобы дернуть все события после.

chestozo commented 8 years ago

Ну вот да, возможно проседание производительности..

vitkarpov commented 8 years ago

С другой стороны, раз тебе нужно что-то сделать до скрытия ноды — предполагается, что это что-то синхронное.

chestozo commented 8 years ago

Не факт, но допустим )

vitkarpov commented 8 years ago

Ну, я к тому, что если тебе нужны только данные от ноды, типа offsetHeight — тогда надо в этом обработчике просто взять их и записать куда-то, легкая операция.

А на ns-view-hide уже выполнять свои адские рассчеты.

vitkarpov commented 8 years ago

Но про эту особенность нужно будет помнить, конечно

iEgit commented 8 years ago

С другой стороны, раз тебе нужно что-то сделать до скрытия ноды — предполагается, что это что-то синхронное.

Самое очевидное применение перед скрытием view - это анимация, которая не может быть синхронной.

vitkarpov commented 8 years ago

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

Поэтому это скорее не про анимации все-таки.

chestozo commented 8 years ago

Да, анимации мы тут не поддержим, это просто lifecycle hook.