Pull to refresh

Comments 7

Спасибо весьма познавательно, точно уж пригодится в готовящимся проекте.
Ай-ай-яй, Romanych, нехорошо обманывать! — подумал я, прочитав о том, что-де, Knockout рассчитывает зависимость для dependentObservable только в первый раз. Потом, смотрю, исправились.

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

Например

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 вынужден треккить зависимости при каждом вычислении — так список базовых свойств может динамически расширяться.
Спасибо за ценное дополнение. Я старался донести важность того, что Нокаут запоминает, к чему обращались при чтении. Получилось немного невнятно из-за привязки к изначальной задаче. У вас более яркий пример, спасибо.
Не за что! Не расскажете, как доклад прошел и что затронули? И еще интересно, какие вопросы задавали.
Доклад прошёл хорошо. Можно будет посмотреть видео. Обещали через неделю выложить, обязательно дам ссылку.

Рассказал зачем вообще нужен MVVM на простейшем примере. Поставили задачу «Отобразить окружность заданого радиуса и цвета». Потом решение задачи без применения паттернов проектирования, потом немного усложнили задачу — добавилось пару мест для управления параметрами (цвет и радиус) и пару мест где они должны отображаться. Посмотрели на лапшевидный код.
Далее попробовали сделать нечто MVVM поднобное, а потом уже та же задача на Knockout'е.

Это всё длилось порядка 20-25 минут. А потом где-то 40-50 минут публичного программирования с описанием действий. Простенький редактор списка людей, ну и полезные хинты.

На самом деле очень базовые вещи, но для введения вполне познаватально и полезно.
Здорово! Я для наших программистов тоже делал небольшой курс. Придумал задание, охватывающее спектр технологий и библиотек, и кучу ресурсов: ссылки, видео, книги — для изучения. Потом просто помогал с выполнением, если у кого трудности возникали. После такой тренировки ребята в проекте чувствуют себя вполне уверенно.
Сама идея использовать dependentObservable возникла в голове тут же, но то наверное уже опыт работы с библиотекой сказывается.

Вообще жаль, что я к вам на сходку не попал — пришлось пропустить по семейным обстоятельствам, — а так вообще приятно, что в нашем городе еще кто-то Нокаут использует.
Sign up to leave a comment.

Articles