02.01.2018

Справка по Computed переменным — Knockout.js

Следующая документация описывает, как строить и работать с computed-переменными.

Строим computed-переменную

Computed-переменная может быть построена используя одну из следующих форм:

  1. ko.computed( evaluator [, targetObject, options] ) — Эта форма поддерживает самый типичный вариант создания computed-переменных.
    • evaluator — Функция (так же оценочная функция), которая используется для оценки (расчета) текущего значения computed-переменной.
    • targetObject — Если указано, определяет значение контекста для this когда KO вызывает вашу callback-функцию. Смотри раздел управление контекстом this чтобы узнать больше.
    • options — Объект с дополнительными свойствами для computed-переменной. Смотри полный список свойств ниже.
  2. ko.computed( options ) — Эта форма с одним параметром для создания computed-переменной, принимающей JavaScript объект с любым из следующих свойств.
    • read — Обязательное. Функция, которая используется для оценки (расчета) текущего значения computed-переменной.
    • write — Опциональное. Если указано, делает computed-переменную записываемой. Это функция, которая получает значения, которые пытаются записать другие участки кода в вашу computed-переменную. Вам предоставляется возможность указать собственную логику для обработки входящих значений, обычно происходит запись значений в некоторые базовые observable-переменные.
    • owner — Опциональное. Если указано, определяет значение для this когда KO запускает ваши callback-функции для read или write.
    • pure — Опциональное. Если этот параметр равен true, то computed-переменная будет настроена, как purecomputed переменная. Данный параметр является альтернативным способом к конструктору ko.pureComputed.
    • deferEvaluation — Опциональное. Если параметр равен true, то значение computed-переменной не будет повторно пересчитываться, пока где-то не будет реальной попытки получить значение данной переменной, или не будет вручную добавлена подписка на её значение. По-умолчанию,  computed-переменные определяют свое значение мгновенно, во время создания.
    • disposeWhen — Опциональное. Если указано, эта функция будет вызываться перед каждым пересчетом значения, для определения, должна ли computed-переменная освободить ресурсы или нет. Значение true запустит освобождение ресурсов от данной computed-переменной.
    • disposeWhenNodeIsRemoved — Опциональное. Если указано, освобождение ресурсов данной computed-переменной будет запущено, когда указанный DOM элемент был удален KO. Эта возможность используется для высвобождения ресурсов, вовлеченных в процесс работы computed-переменных, используемых  в биндингах, когда узлы DOM были удалены через template и биндинги управления потоком передачи данных (control-flow).
  3. ko.pureComputed( evaluator [, targetObject] ) — Создает pure computed переменную используя переданную функцию расчета значения и опциональный объект, используемый для контекста this. В отличии от ko.computed, это метод не принимает параметр options.
  4. ko.pureComputed( options ) — Создает pure computed-переменную, используя объект options. Принимает опции readwrite, и owner описанные выше.

Использование computed переменной

Computed переменная предоставляет следующие функции:

  • dispose() — Вручную высвобождает ресурсы, задействованные для этой computed-переменной, очищая все подписки и зависимости. Эта функция удобна, если вы хотите остановить обновления computed-переменной, или хотите очистить память для computed-переменной, которая имеет зависимости от observable-переменных, которые не были удалены.
  • extend(extenders) — Применяет переданные экстендеры к computed-переменной.
  • getDependenciesCount() — Возвращает текущее число зависимостей данной computed-переменной.
  • getSubscriptionsCount( [event] ) — Возвращает текущее число подписок (либо от других computed-переменных, или вручную созданных подписок) computed-переменной. Опционально, можно передать имя события (вроде «change»), чтобы вернуть число подписок только на это событие.
  • isActive() — Возвращает может ли данная computed-переменная быть в будущем обновлена. Computed-переменная является неактивной, если не имеет зависимостей.
  • peek() — Возвращает текущее значение computed-переменной без создания зависимости (смотри раздел peek).
  • subscribe( callback [,callbackTarget, event] ) — Регистрирует прямую подписку для уведомлений об изменении значения computed-переменной.

Определение типа observable-переменной

Для проверки, является ли свойство observable, computed, и т.п. переменной, используйте следующий набор функций:

  • ko.isObservable — вернет true для observable, observable массивов, и всех computed-переменных.
  • ko.isWritableObservable — вернет true для observable, observable массивов, и записываемых computed переменных (так же имеет алиас ko.isWriteableObservable).
  • ko.isComputed — вернет true для всех computed переменных.
  • ko.isPureComputed — вернет true для pure computed переменных.

Используем контекст computed переменных

Во время вызова оценочной функции в computed переменных, вы можете вызвать функцию ko.computedContext для получения информации о текущем computed свойстве. Она предоставляет следующие методы:

  • isInitial() — Функция, возвращающая true если оценочная функция текущей computed-переменной была вызвана самый первый раз, или false в иных случаях. Для pure computed переменных, isInitial() всегда будет возвращать undefined.
  • getDependenciesCount() — Возвращает число зависимостей для computed переменной, обнаруженных на данный момент времени во время текущего вызова оценочной функции.
    • Примечание: ko.computedContext.getDependenciesCount() эквивалентно вызову getDependenciesCount() на самой computed переменной. Причина, по которой метод так же существует на ko.computedContext — это предоставление способа подсчета зависимостей при самом первом запуске оценочной функции, ещё до того, как computed переменная закончила свое создание.

Пример:

var myComputed = ko.computed(function() {
    // ... Пропущено: читаем некоторые данные, которые могут быть observable-переменными ...
 
    // Теперь, давайте исследуем ko.computedContext
    var isFirstEvaluation = ko.computedContext.isInitial(),
        dependencyCount = ko.computedContext.getDependenciesCount(),
    console.log("Расчет значения " + (isFirstEvaluation ? "в первый раз" : "снова"));
    console.log("Сейчас, у данной computed-переменной есть " + dependencyCount + " зависимостей");
 
    // ... Пропущено: возвращаем результат ...
});

Такие конструкции обычно полезны лишь в продвинутых сценариях, например, когда основное назначение вашей computed переменной — запуск какого-то стороннего действия во время вызова оценочной функции, и вы хотите выполнить какой-то алгоритм настройки лишь при первом запуске, или только в том случае, если есть хотя бы одна зависимость (и следовательно, переменная может пересчитаться в будущем). Большинству computed свойств не требуется отслеживание того, были и значения рассчитаны ранее, или же сколько зависимостей они содержат.


Эксклюзивно для сайта skv1991.ru

Перепечатка и копирование строго запрещены.

Оригинал страницы

Опубликовано: 02/01/2018

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *