Остро-теоретически о viewModel
Всем привет!
Объясните, пожалуйста, как viewModel узнает об изменении своих данных? Вот у меня в приложении есть viewModel: Ext.define('My.view.main.MainModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.main', data: { 'json': null }, formulas: { viewJson: { deep: true, get: function(get) { this.set('json', someObject.getJson()); return get('json'); } } } }); Если я во viewController пишу this.getViewModel().set('json', someObject.getJson()); меняя тем самым весь json, формула viewJson не работает в том контейнере, где я на нее ссылаюсь bind_ом. А если я тупо во viewController пишу this.getViewModel().notify(); то будучи изнасилованной нотифаем, ViewModel отрабатывает формулу viewJson корректно. Именно отсюда у меня вопрос - а что надо сделать с данными viewModel, чтобы она поняла, что они изменились и пора отрабатывать связанные формулы? |
Мне иногда даже .notify() не хватает.
Делаю viewModel.getRoot().descend(['info']).formula.react();Эта конструкция заставит ViewModel пересчитать значение info и обновить все связанные View. |
Хотя тут все работает.
|
kolka,
Цитата:
Цитата:
Получается, что MVVM лучше MVC только потому, что нам надо продавать 6 версию, которая должна чем-то совершенно передовым отличаться от 5, ну или там от 4... Поскольку не только у меня не работают такие конструкции во viewModel_и, то мой вопрос вырождается в следующий - а уважаемое сообщество вообще видит смысл в использовании этой технологии, если заранее не ясно будет оно работать или придется прибегать к ломовым приемам? :-) |
kolka,
Цитата:
Пытался подковаться на тему метода descend() объекта Ext.app.bind.RootStub - описание отсутствует, от слова "вообще"... :-) Поиск по всему мануалу также не выявляет следов такого метода. Как, впрочем, и метода react() объекта Ext.app.bind.Formula. Наверное это какой-то secretWeapon. Хочется спросить, а нет ли примерно такого же метода, который в качестве параметра принимает не имя правила, а имя данных, ну типа ['json'] и обновляет все, что связано с этими данными? Ну типа явного напоминания того, что viewModel и так должна делать при изменении данных (ее же методом set) без всяких лишних напоминаний... :-) |
Эту часть я знаю недостаточно глубоко, чтобы дельно ответить. Почему бы вам не спросить в официальном форуме? MVVM писал Evan Trimboli, он читает форум и регулярно отвечает, особенно на такие заковыристые вопросы.
|
nohuhu,
Согласен, хорошая идея. Маловато знаю английский, к сожалению. К тому же, я вовсе не уверен, что хорошо понимаю сам принцип MVVM. Например, я откуда-то взял образец правила, который и приспособил для себя под именем viewJson (см. 1 пост). Далее я присмотрелся и вовсе не понял, а зачем в методе get этого правила используется метод set, когда по идее все данные уже установлены до момента выполнения правила? Ведь оно должно выполняться только после того, как данные поменялись, да? Я выкинул строчку с методом set - все вообще перестало работать... Я в дебагере убедился что данные viewModel корректно установлены перед вызовом ее метода notify() - да, все присвоено правильно, но толку мало. То есть правило корректно работает только тогда, когда метод get сначала сам устанавливает данные viewModel_и и только потом возвращает эти же данные... Как минимум неэффективно. Ведь кто-то снаружи уже установил эти данные, иначе правило просто не было бы запущено. Замкнутый круг. Спросить все это по-английски - это не про меня. Так что если кто разобрался с этой технологией - поясните, пожалуйста, ну или ткните носом где почитать. Читать по-английски я когда-то научился - деваться было некуда... :-) |
Цитата:
Наверное я чего-то совсем не понимаю. Бывает... :-) |
Часовой пояс GMT +3, время: 00:57. |