Comments 7
Спасибо весьма познавательно, точно уж пригодится в готовящимся проекте.
0
Ай-ай-яй, Romanych, нехорошо обманывать! — подумал я, прочитав о том, что-де, Knockout рассчитывает зависимость для dependentObservable только в первый раз. Потом, смотрю, исправились.
Треккинг зависимостей на каждом шаге нужен для случаев, когда в зависимости от значений каких-то свойств список задействованных свойств может быть разным.
Например
Допустим, изначально клиент указал в качестве страны проживания Украину. Тогда location стал бы зависить только от полей city и country.
Т.е. при изменении значения одного из этих observables вызывались бы все listeners, привязанные к свойству location.
Затем пользователь сменил страну на США. Понятное дело, что location у него изменился, но вот обработчики событий, привязанных к location продолжили срабатывать только при изменении страны и города — изменения штата игнорировались полностью.
Понятное дело, при собственно вычислении значения location() штат использовался — но все дело в событиях и обработчиках.
Именно поэтому Knockout вынужден треккить зависимости при каждом вычислении — так список базовых свойств может динамически расширяться.
Треккинг зависимостей на каждом шаге нужен для случаев, когда в зависимости от значений каких-то свойств список задействованных свойств может быть разным.
Например
viewModel.location = ko.dependentObservable(function () {
if (this.country() === "United States") {
return this.city() + ', ' + this.state();
} else {
return this.city() + ', ' + this.country();
}
}, viewModel);
Допустим, изначально клиент указал в качестве страны проживания Украину. Тогда location стал бы зависить только от полей city и country.
Т.е. при изменении значения одного из этих observables вызывались бы все listeners, привязанные к свойству location.
Затем пользователь сменил страну на США. Понятное дело, что location у него изменился, но вот обработчики событий, привязанных к location продолжили срабатывать только при изменении страны и города — изменения штата игнорировались полностью.
Понятное дело, при собственно вычислении значения location() штат использовался — но все дело в событиях и обработчиках.
Именно поэтому Knockout вынужден треккить зависимости при каждом вычислении — так список базовых свойств может динамически расширяться.
+1
Спасибо за ценное дополнение. Я старался донести важность того, что Нокаут запоминает, к чему обращались при чтении. Получилось немного невнятно из-за привязки к изначальной задаче. У вас более яркий пример, спасибо.
+1
Не за что! Не расскажете, как доклад прошел и что затронули? И еще интересно, какие вопросы задавали.
0
Доклад прошёл хорошо. Можно будет посмотреть видео. Обещали через неделю выложить, обязательно дам ссылку.
Рассказал зачем вообще нужен MVVM на простейшем примере. Поставили задачу «Отобразить окружность заданого радиуса и цвета». Потом решение задачи без применения паттернов проектирования, потом немного усложнили задачу — добавилось пару мест для управления параметрами (цвет и радиус) и пару мест где они должны отображаться. Посмотрели на лапшевидный код.
Далее попробовали сделать нечто MVVM поднобное, а потом уже та же задача на Knockout'е.
Это всё длилось порядка 20-25 минут. А потом где-то 40-50 минут публичного программирования с описанием действий. Простенький редактор списка людей, ну и полезные хинты.
На самом деле очень базовые вещи, но для введения вполне познаватально и полезно.
Рассказал зачем вообще нужен MVVM на простейшем примере. Поставили задачу «Отобразить окружность заданого радиуса и цвета». Потом решение задачи без применения паттернов проектирования, потом немного усложнили задачу — добавилось пару мест для управления параметрами (цвет и радиус) и пару мест где они должны отображаться. Посмотрели на лапшевидный код.
Далее попробовали сделать нечто MVVM поднобное, а потом уже та же задача на Knockout'е.
Это всё длилось порядка 20-25 минут. А потом где-то 40-50 минут публичного программирования с описанием действий. Простенький редактор списка людей, ну и полезные хинты.
На самом деле очень базовые вещи, но для введения вполне познаватально и полезно.
+1
Здорово! Я для наших программистов тоже делал небольшой курс. Придумал задание, охватывающее спектр технологий и библиотек, и кучу ресурсов: ссылки, видео, книги — для изучения. Потом просто помогал с выполнением, если у кого трудности возникали. После такой тренировки ребята в проекте чувствуют себя вполне уверенно.
0
Сама идея использовать dependentObservable возникла в голове тут же, но то наверное уже опыт работы с библиотекой сказывается.
Вообще жаль, что я к вам на сходку не попал — пришлось пропустить по семейным обстоятельствам, — а так вообще приятно, что в нашем городе еще кто-то Нокаут использует.
Вообще жаль, что я к вам на сходку не попал — пришлось пропустить по семейным обстоятельствам, — а так вообще приятно, что в нашем городе еще кто-то Нокаут использует.
0
Only those users with full accounts are able to leave comments. Log in, please.
KnockoutJS: Фильтрация списков на лету