Knockout JS. Первое знакомство

В изучении программирования мне, как и многим моим сотоварищам по профессии, вредит отсутсвие систематизированного изучения предмета. Последовательное изучение заменяется поиском рецептов и их использованием, без понимания сути происходящих процессов. С недавних пор я начал использовать knockoutjs и уже пару раз столкнулся с тем, что начал изобретать велосипед, вместо того, чтобы использовать возможности библиотеки.

Knockout пленил меня своей изящностью и потому я решил прочесть о всех его возможностях, прежде, чем продолжать присать код. Очень уж не хочется переделывать, написанное всего пару недель назад. К тому же, документация по библиотеке достаточно лаконична. Я попытаюсь составить обзор этой документации, чтобы понять все возможности knockout и упростить поиск нужной мне информации

How KO works and what benefits it brings. Knockout - это хорошо, потому что эта библиотека позволяет отделить данные от отображения при этом обеспечивает их синхронизацию. Работать с ней приятно и интересно, а эта одна из тех вещей которая меня привлекает в программировании.

Creating view models with observables Оbservables - это элементы модели, для которых обеспечивается связывание с соответсвующими отображениями в интерфейсе. Knockout автоматически отслеживает изменения, наблюдаемых переменных и производит обновление интерфейса. При необходимости можно подписать собственную функцию, которая будет реагировать на изменение конкретного observable. (Используется свойство subscribe)

Определить тот факт, что переменная является объектом внимания knockout можно с помощью функций ko.isObservable и ko.isWriteableObservable

Using computed observables На ряду с наблюдаемыми величинами в модели могут использоваться вычисляемые переменные, которые зависят от других переменных и вычисляются каждый раз, когда одна из них изменяется. При этом knockout самостоятельно определяет зависимости переменных и не требует указывать этого явно.

Вычисляемые величины могут изменяться с помощью интерфейса и для обновления исходных данных в моделии требуется объявить computed, как объект с двумя свойствами-функциями (read и write). Такой подход может использоваться при конвертации данных (в модели хранится timestamp, а в интерфейсе отображается datepicker с датой в виде строки) или для валидации данных при вводе.

Для определения того, что величина является вычисляемой в библиотеке имеется сервисная функция ko.isComputed

Working with observable arrays Knockout может контролировать не только изменение переменных, но и следить за массивами. При этом отслеживается именно состояние массива, а не элементов, которые в нех хранятся.

observableArray представляет собой надстройку над стандартным массивом в JavScript и предлагает собственные реализации некоторых функций, например, push, pop, shift, unshift, sort, reverse, а так же добавляет несколько собственных: remove, removeAll, destroy, destroyAll

Вызов функции destroy не приводит к удалению объекта из массива, а устанавливает свойство _destroy = true у соответсвующего объекта. Это свойство можно использовать при обработке массива на сервере, как это происходит в случае в Rails. Кроме того такие объекты будут игнорироваться knockout при использовании привязки (binding) foreach

Читайте в блоге

Chromium Embedded Framework. Асинхронный AJAX
Javascript XSS и Crazy Iframe Stuff
jQuery доступ к IFRAME

Метки: js knockoutjs

Комментарии:

Войдите на сайт, чтобы оставить комментарий