Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Байндинг работает асинхронно? (https://javascript.ru/forum/extjs/64888-bajjnding-rabotaet-asinkhronno.html)

Infarch 12.09.2016 10:38

Байндинг работает асинхронно?
 
Здравствуйте.

Столкнулся с таким фактом: если я меняю некое свойство вьюшки через вьюмодель и байндинг, то изменения не видны в той же функции. Вот, набросал фидл: https://fiddle.sencha.com/#fiddle/1gkc

Общая задача: через модель меняем тайтл и тут же его читаем. Если это делается по кнопке Sync то я получаю старый тайтл. Async работает правильно, но только если defer 5 и выше. Меньшие значения работают как Sync (интересно почему?).

Пример примитивный и надуманный. В реальном проекте я через байндинг меняю свойство allowBlank у некоторых инпутов на форме. Дело в том что форму можно сохранить в режиме черновика и тогда не все инпуты обязательны к заполнению. Вот решеил вьюмодель заюзать.

Ну а теперь не знаю как правильнее. Вьюмодель + defer, или выбирать нужные инпуты и менять allowBlank каждому по отдельности? Первый вариант привлекательнее.

Неужели байндинг действительно асинхронный?

Moloch 12.09.2016 22:58

а почему не получать значения сразу из вью модели?
alert(this.getViewModel().get('title'));

Infarch 13.09.2016 10:24

Потому что вопрос не об этом. Меня интересует как работает механизм связывания на низком уровне, и пример этот просто предельно примитивный образец. В реальной жизни, у меня есть кусок кода который меняет НЕЧТО во вьюмодели и тут же запускает некий функционал в стандартных компонентах. Оный функционал зависит от того что я поменял и я ожидаю результат согласно заданным данным. А этого не происходит. Вот defer c заметной задержкой помогает, да. Но мне это кажется не очень хорошим решением, да и вообще интересно.


Часовой пояс GMT +3, время: 18:39.