Холодным февральским утром хочу поделиться с вами небольшой вылазкой, которая состоялась ещё осенью, но была незаслуженно забыта и пропущена в этом блоге. Исправляюсь.
Один из дней нашей новогодней поездки в Испанию был отведён под Толедо — древний город, бывший некогда столицей. Расположен всего в семидесяти километрах от Мадрида. Честно говоря, он произвёл даже большее впечатление, чем нынешняя испанская столица. Я бы с огромным удовольствием провёл тут ещё чуть больше времени.
Sencha добавила в ExtJs 5 крайне удобную концепцию — ViewModel. Она позволяет динамически связывать данные с представлением. Причём данные могут зависеть друг от друга и вычисляться по сложным алгоритмам. Результат кешируется, и до тех пор, пока исходные данные не поменяются, конечный результат пересчитываться и обновляться не будет. Обязательно посмотрите, если ещё не сталкивались, — очень удобная штука.
Но, к сожалению, есть случаи, когда вселенская гармония нарушается и ViewModel перестаёт вести себя как подобает. Например, когда исходные данные — Store. ViewModel не умеет подписываться на события изменения ни Store, ни вложенных объектов. И как назло, разработчики не предусмотрели метода, который позволил бы заставить ViewModel пересчитать какое-нибудь значение. В таких случаях приходится лезть в дебри реализации и искать обходные пути.
Делюсь заклинанием:
viewModel.getRoot().descend(['info']).formula.react();
Эта конструкция заставит ViewModel пересчитать значение info
и обновить все связанные View. Просто подставьте название вашей формулы вместо info
.
Проверено на ExtJS версий 5.0 и 5.1. Пользуйтесь и не позволяйте мелочам портить настроение.
Вечером 31 декабря самолёт небезызвестной ирландской авиакомпании доставил нас в Мадрид. Почему Мадрид? Ну, во-первых, мы там не были. А во-вторых, там тепло.
Приглашаю всех насладиться вместе с нами этим прекрасным городом.
Однажды прохладным декабрьским утром самолёт нашей национальной авиакомпании Белавиа забросил нас во второй по величине город России, дабы редакция блога смогла полностью насладиться сим местом.