09.01.2018

Биндинг «text» — Knockout.js

Назначение

Биндинг text заставляет связанный DOM элемент отображать текстовое значение вашего параметра.

Обычно, его полезно использовать с элементами вроде <span> или <em> которые традиционно используются для отображения текст, но технически, можно использовать этот биндинг с любым элементом.

Пример

Сегодняшнее сообщение: <span data-bind="text: myMessage"></span>
 
<script type="text/javascript">
    var viewModel = {
        myMessage: ko.observable() // Изначально пусто
    };
    viewModel.myMessage("Здорово, мир!"); // Показываем текст
</script>

Параметры

  • Основной параметр
    Knockout задает контент элемента в виде текстового значения из переданного в биндинг параметра. Любой предыдущий контент будет перезаписан.Если в этом параметре observable-значение, то биндинг будет обновлять текст элемента при изменении значения. В ином случае, он установит текст элемента единожды и не будет обновлять его в будущем.Если вы передадите что-либо, отличающееся от числа или строки (например., вы передали объект или массив), то отображаемый текст будет эквивалентен вызову вашПараметр.toString()
  • Дополнительные параметры
    • Нет

Примечание 1: Использования функций и выражений для определения текстового значения

Если вам нужно определить текст программным путем, то одним из вариантов будет создание computed переменной, и использовать её оценочную функцию для размещения вашего кода, определяющего, какой текст отображать.

Например,

Сегодня товар <span data-bind="text: priceRating"></span>.
 
<script type="text/javascript">
    var viewModel = {
        price: ko.observable(24.95)
     };
     viewModel.priceRating = ko.pureComputed(function() {
         return this.price() > 50 ? "дорогой" : "доступный";
     }, viewModel);
</script>

Теперь, при изменении свойства price, текст будет переключаться между “дорогой” и “доступный”, как это требуется.

В качестве альтернативы, можно не создавать computed-переменную, если у вас простая операция вроде данной. Вы можете передать произвольное JavaScript выражение в биндинг text. Например,

Сегодня товар <span data-bind="text: price() > 50 ? 'дорогой' : 'доступный'"></span>.

Данное выражение будет иметь совершенно такой же результат, без необходимости использовать computed-переменную priceRating.

Примечание 2: Об HTML кодировке

Поскольку этот биндинг задает текст, используя text DOM-узла, то безопасно использовать любое строковое значение без риска внедрения HTML или скрипта. Например, если вы напишете:

viewModel.myMessage("<i>Здорово, мир!</i>");

… это не будет отображено, как текст с курсивом, но будет отображаться как обычный текстовый литерал с отображением угловых скобок.

Если вам нужно таким образом установить HTML-содержимое, смотри биндинг html.

Примечание 3: Использование “text” без элемента-контейнера

Иногда бывает нужно установить текст используя Knockout без использования дополнительного DOM-элемента с биндингом text. Например, не разрешается вкладывать другие элементы внутри тега option, так что следующее не сработает.

<select data-bind="foreach: items">
    <option>Элемент <span data-bind="text: name"></span></option>
</select>

Для реализации такого подхода, можно использовать способ привязки биндинга без контейнера, который основан на тегах комментариев.

<select data-bind="foreach: items">
    <option>Элемент <!--ko text: name--><!--/ko--></option>
</select>

Теги комментариев <!—ko—> и <!—/ko—> работают в качестве маркеров начала/конца, определяющие “виртуальный элемент”, содержащий внутри разметку. Knockout понимает такой синтаксис виртуального элемента и привязывает данные, как если бы у вас был реальный элемент-контейнер.

Примечание 4: О странностях IE 6 с пробелом

IE 6 имеет странность (quirk), где он иногда игнорирует пробел, идущий сразу после пустого span элемента. Это не имеет ничего общего с Knockout, но в случае, когда вы хотите написать:

Добро пожаловать, <span data-bind="text: userName"></span> на наш веб-сайт.

… и IE 6 не отобразит пробела до слова на наш веб-сайт, можно избежать этой проблемы, вставив любой текст между тегами <span>, например:

Добро пожаловать, <span data-bind="text: userName"> </span> на наш веб-сайт.

Другие браузеры, и более новые версии IE, не имеют этой странности.

Зависимости

Нет, кроме ядра библиотеки Knockout.


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

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

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

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

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

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