что такое binding или двустороннее связывание

Что такое двухстороннее связывание?

Я много читал, что Backbone не выполняет двустороннюю привязку, но я не совсем понимаю эту концепцию.

Может ли кто-нибудь дать мне пример того, как двухстороннее связывание работает в базе кода MVC и как это не работает с Backbone?

5 ответов

Двухстороннее связывание означает, что:

В Backbone вы можете легко достичь # 1, привязав метод представления «render» к событию «change» его модели. Чтобы достичь # 2, вам также нужно добавить прослушиватель изменений в элемент input и вызвать model.set в обработчике.

Вот скрипка с двусторонней привязкой, настроенной в Backbone.

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

На github есть более расширенный список расширений / плагинов для магистралей.

У МакГарнагла отличный ответ, и вы захотите принять его, но я подумал, что упомяну (так как вы спросили), как работает привязка данных.

Обычно это реализуется путем запуска событий всякий раз, когда в данные вносятся изменения, которые затем приводят к обновлению прослушивателей (например, пользовательского интерфейса).

Двухстороннее связывание работает, делая это дважды, с некоторой осторожностью, чтобы гарантировать, что вы не застрянете в цикле событий (когда обновление события вызывает другое событие, которое будет запущено).

Двухстороннее связывание означает, что любые связанные с данными изменения, влияющие на модель, немедленно распространяются в соответствующие представления и что любые изменения, вносимые в представления (ии) (скажем, пользователем) немедленно отражаются в базовой модели. Когда изменяются данные приложения, меняется и пользовательский интерфейс, и наоборот.

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

Это довольно типичный шаблон в необработанном приложении Backbone. Как видите, для этого требуется приличное количество (довольно стандартного) кода.

AngularJS и некоторые другие альтернативы (Ember, Knockout…) обеспечивают двустороннюю привязку в качестве функции от первого лица. Они абстрагируют многие крайние случаи в рамках некоторых DSL и делают все возможное для интеграции двухстороннего связывания в свою экосистему. Наш пример будет выглядеть примерно так с AngularJS (непроверенный код, см. Выше):

Но учтите, что некоторые полноценные расширения для двусторонней привязки действительно существуют и для Backbone (в необработанном, субъективном порядке уменьшения сложности): Эпоксидная смола, Stickit, ModelBinder…

Например, в Epoxy есть одна интересная особенность: она позволяет вам объявлять ваши привязки (атрибуты модели элемента DOM представления) либо внутри шаблона (DOM), либо внутри реализации представления (JavaScript). Некоторым людям очень не нравится добавлять «директивы» в DOM / шаблон (например, атрибуты ng- *, требуемые AngularJS, или атрибуты привязки данных Ember).

Взяв в качестве примера Epoxy, можно преобразовать необработанное приложение Backbone во что-то вроде этого (…):

На самом деле emberjs поддерживает двустороннюю привязку, которая является одной из самых мощных функций для инфраструктуры JavaScript MVC. Вы можете проверить это, упомянув binding в руководстве пользователя.

Для emberjs создать двухстороннюю привязку можно, создав новое свойство со строкой Binding в конце, а затем указав путь из глобальной области видимости:

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

Надеюсь, это поможет в расширении оригинального ответа.

Источник

Привязка данных в Angular (binding)

Итак, в предыдущих разделах мы подготовили проект к практической работе. В данном разделе мы рассмотрим, что такое привязка данных («байндинг», от англ. binding — связывание) в Angular и как ее делать.

Привязки используются для передачи каких-либо данных из компонента в шаблон и обратно. Есть несколько типов привязок в Angular:

Строчная интерполяция

Протестируем первый вид привязки. Изменим код шаблона, а именно его заголовок:

Затем изменим файл компонента и добавим переменную title

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

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

Привязка свойств и событий

Теперь сделаем второй и третий тип привязки. Добавим в разметку следующий элемент:

Для большей наглядности привязки перенесены на новую строку.

В файле компонента сделаем следующие изменения:

Теперь рассмотрим, что мы изменили.

Следующий input с типом text и кнопка также зависят от значения флага isChecked — если чекбокс отмечен (т.е. isChecked = true), тогда срабатывает привязка к атрибуту disabled и эти элементы отключаются. Как только вы снимите чекбокс, они станут доступны. Также к текстовому полю, к атрибуту есть привязка переменной с заголовком [value]=’title’

Еще одна привязка в этом примере сделана к кнопке — при клике на кнопку срабатывает метод changeTitle() и наш заголовок меняется на ‘Новый тайтл’.

Таким же способом можно сделать и привязку к атрибуту [class] или [style] любого тега

Двусторонняя привязка

А теперь давайте сделаем двухстороннюю привязку и будем менять заголовок на то значение, которое будем вводить в поле input.

Давайте для начала подготовим наш проект. В файле шаблона компонента нужно заменить эти строки, вместо [value] вставляем директиву [(ngModel)]

Далее в файле app.module.ts нам обязательно нужно подключить FormsModule

Источник

Привязка

Введение в привязку данных

В WPF привязка (binding) является мощным инструментом программирования, без которого не обходится ни одно серьезное приложение.

Привязка подразумевает взаимодействие двух объектов: источника и приемника. Объект-приемник создает привязку к определенному свойству объекта-источника. В случае модификации объекта-источника, объект-приемник также будет модифицирован. Например, простейшая форма с использованием привязки:

что такое binding или двустороннее связывание. 11.1. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-11.1. картинка что такое binding или двустороннее связывание. картинка 11.1.

Для определения привязки используется выражение типа:

Работа с привязкой в C#

В данном случае получаем привязку для свойства зависимостей TextProperty элемента myTextBlock.

Также можно полностью установить привязку в коде C#:

Если в дальнейшем нам станет не нужна привязка, то мы можем воспользоваться классом BindingOperations и его методами ClearBinding() (удаляет одну привязку) и ClearAllBindings() (удаляет все привязки для данного элемента)

Некоторые свойства класса Binding :

ElementName : имя элемента, к которому создается привязка

IsAsync : если установлено в True, то использует асинхронный режим получения данных из объекта. По умолчанию равно False

Mode : режим привязки

Path : ссылка на свойство объекта, к которому идет привязка

TargetNullValue : устанавливает значение по умолчанию, если привязанное свойство источника привязки имеет значение null

RelativeSource : создает привязку относительно текущего объекта

Source : указывает на объект-источник, если он не является элементом управления.

XPath : используется вместо свойства path для указания пути к xml-данным

Режимы привязки

Свойство Mode объекта Binding, которое представляет режим привязки, может принимать следующие значения:

OneWay : свойство объекта-приемника изменяется после модификации свойства объекта-источника.

OneTime : свойство объекта-приемника устанавливается по свойству объекта-источника только один раз. В дальнейшем изменения в источнике никак не влияют на объект-приемник.

OneWayToSource : объект-приемник, в котором объявлена привязка, меняет объект-источник.

Применение режима привязки:

Обновление привязки. UpdateSourceTrigger

Односторонняя привязка от источника к приемнику практически мгновенно изменяет свойство приемника. Но если мы используем двустороннюю привязку в случае с текстовыми полями (как в примере выше), то при изменении приемника свойство источника не изменяется мгновенно. Так, в примере выше, чтобы текстовое поле-источник изменилось, нам надо перевести фокус с текстового поля-приемника. И в данном случае в дело вступает свойство UpdateSourceTrigger класса Binding, которое задает, как будет присходить обновление. Это свойство в качестве принимает одно из значений перечисления UpdateSourceTrigger :

PropertyChanged : источник привязки обновляется сразу после обновления свойства в приемнике

LostFocus : источник привязки обновляется только после потери фокуса приемником

Explicit : источник не обновляется до тех пор, пока не будет вызван метод BindingExpression.UpdateSource()

Свойство Source

Свойство Source позволяет установить привязку даже к тем объектам, которые не являются элементами управления WPF. Например, определим класс Phone:

Теперь создадим объект этого класса и определим к нему привязку:

что такое binding или двустороннее связывание. 11.2. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-11.2. картинка что такое binding или двустороннее связывание. картинка 11.2.

Свойство TargetNullValue

На случай, если свойство в источнике привязки вдруг имеет значение null, то есть оно не установлено, мы можем задать некоторое значение по умолчанию. Например:

В данном случае у ресурса nexusPhone не установлено свойство Title, поэтому текстовый блок будет выводить значение по умолчанию, указанное в параметре TargetNullValue.

Свойство RelativeSource

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

Self : привязка осуществляется к свойству этого же элемента. То есть элемент-источник привязки в то же время является и приемником привязки.

FindAncestor : привязка осуществляется к свойству элемента-контейнера.

Например, совместим источник и приемник привязке в самом элементе:

что такое binding или двустороннее связывание. 11.3. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-11.3. картинка что такое binding или двустороннее связывание. картинка 11.3.

Здесь текст и фоновый цвет текстового поля связаны двусторонней привязкой. В итоге мы можем увидеть в поле числовое значение цвета, поменять его, и вместе с ним изменится и фон поля.

Привязка к свойствам контейнера:

При использовании режима FindAncestor, то есть привязке к контейнеру, необходимо еще указывать параметр AncestorType и передавать ему тип контейнера в виде выражения AncestorType= . При этом в качестве контейнера мы могли бы выбрать любой контейнер в дереве элементов, в частности, в данном случае кроме Grid таким контейнером также является элемент Window.

Свойство DataContext

что такое binding или двустороннее связывание. 10.4. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-10.4. картинка что такое binding или двустороннее связывание. картинка 10.4.

Таким образом мы задаем свойству DataContext некоторый динамический или статический ресурс. Затем осуществляем привязку к этому ресурсу.

Источник

Русские Блоги

С помощью Windows Presentation Foundation (WPF) можно легко разработать мощный пользовательский интерфейс, а WPF предоставляет возможности привязки данных. Привязка данных WPF аналогична функциям привязки данных в Winform и ASP.NET, но также отличается.В WPF привязка данных выполняется посредством привязки обратного кода, привязки внешнего XAML или их комбинации. набор. Вы можете связывать элементы управления, общедоступные свойства, XML или объекты. Привязка данных в WPF выполняется быстрее, гибче и проще, чем WinForm и ASP.NET.

Что такое привязка данных

Для привязки данных в WPF должны быть цель привязки и источник данных для привязки. Целью привязки может быть любое доступное свойство или элемент управления, который наследуется от DependencyProperty, например свойство Text элемента управления TextBox. Источниками данных могут быть свойства других элементов управления, таких как экземпляры объектов, элементы XAML, набор данных ADO.NET, данные XML. Для привязки XML и привязки объектов Microsoft предоставляет два вспомогательных класса XmlDataProvider и ObjectDataProvider.
В чем разница между привязкой данных WPF и привязкой данных ASP.NET и WinForm? Самое большое отличие состоит в том, что WPF использует оператор . Inding используется для достижения связи между свойствами элемента управления интерфейсом и фоновыми данными.В этой форме интерфейс переднего плана и фоновые данные связаны для достижения цели соединения интерфейса и данных.

Имя участникаобъяснение
DefaultИспользуйте значение режима по умолчанию для цели привязки. Значения по умолчанию различны для каждого свойства зависимости. Как правило, редактируемые пользователем свойства элемента управления (такие как свойства текстовых полей и флажков) по умолчанию имеют двустороннюю привязку, в то время как большинство других свойств по умолчанию используют одностороннюю привязку. Программный метод для определения того, является ли привязка свойства зависимости односторонней или двусторонней по умолчанию, заключается в использовании GetMetadata для получения метаданных свойства свойства, а затем проверяет логическое значение свойства BindsTwoWayByDefault.
OneTimeКогда приложение запускается или контекст данных изменяется, цель привязки обновляется. Этот тип привязки подходит для ситуаций, когда уместны снимки, использующие текущее состояние, или данные, состояние данных которых фактически является статическим. Вы также можете использовать этот тип привязки, если хотите инициализировать целевое свойство значением из исходного свойства и заранее не знаете контекст данных. Этот тип привязки по сути является упрощенной формой привязки OneWay и может обеспечить лучшую производительность без изменения исходного значения
OneWayКогда источник привязки (источник) изменяется, атрибуты цели привязки (цели) обновляются. Этот тип привязки применим, когда связанный элемент управления неявно доступен только для чтения. Например, вы можете привязать к источнику, такому как биржевой тикер. Или целевое свойство может не иметь интерфейса управления для внесения изменений, такого как цвет фона таблицы, связанный с данными. Если нет необходимости отслеживать изменения целевых свойств, используйте режим привязки OneWay, чтобы избежать накладных расходов в режиме привязки TwoWay.
OneWayToSourceОбновить исходные атрибуты при изменении целевых атрибутов
TwoWayВызывает изменения в исходных или целевых атрибутах для автоматического обновления друг друга. Этот тип привязки подходит для редактируемых форм или других полностью интерактивных сценариев пользовательского интерфейса.

(3) Триггеры могут быть сконфигурированы для определения, когда пользователь вводит данные в интерфейс для изменения значений в источнике данных. Это может быть достигнуто через свойство UpdateSourceTrigger, которое имеет следующие значения:

Имя участникаобъяснение
Defaultr Значение по умолчанию UpdateSourceTrigger для привязанного целевого свойства. Значением по умолчанию для большинства свойств зависимостей является PropertyChanged, а значением по умолчанию для свойства Text является LostFocus. Программный способ определения значения UpdateSourceTrigger по умолчанию для свойства зависимости состоит в том, чтобы использовать GetMetadata для получения метаданных свойства для свойства, а затем проверить значение свойства DefaultUpdateSourceTrigger.
ExplicitОбновлять источник привязки только при вызове метода UpdateSource
LostFocusОбновите источник привязки, когда целевой элемент привязки теряет фокус
PropertyChangedНемедленно обновите источник привязки при изменении свойства цели привязки

Конкретное использование выглядит следующим образом:

Во-вторых, простая привязка

Далее следует первый пример этой статьи, очень простой пример привязки, который демонстрирует, как отобразить выбранное значение в ListBox в TextBlock с помощью привязки.
Сначала добавьте семь ListBoxItems в ListBox в качестве параметров для ListBox.
Во-вторых, свяжите текст второго TextBlock с выбором ListBox через Binding. Свойство ElementName в синтаксисе Binding указывает имя элемента управления, к которому привязано свойство Text TextBlock. Свойство Path указывает свойство элемента ListBox, которое мы свяжем со свойством Text. Конкретный код выглядит следующим образом.

Источник

Привязка данных¶

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

В Angular есть четыре формы привязки данных:

2. Привязка свойства элемента html к значению компонента (односторонняя). Например:

3. Привязка метода компонента к событию в DOM (генерация события в DOM вызывает метод на компоненте) (односторонняя). Например:

4. Двусторонняя привязка, когда элемент DOM привязан к значению на компоненте, при этом изменения на одном конце привязки сразу приводят к изменениям на другом конце. Например:

Первый вид привязки заключается в использовании фигурных скобок, в которые передается значение из компонента. Например, пусть у нас будет определен следующий компонент:

И при запуске приложения выражения типа <> будут автоматически заменяться соответствующими значениями, определенными в компоненте:

что такое binding или двустороннее связывание. binding 1. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-binding 1. картинка что такое binding или двустороннее связывание. картинка binding 1.

И если в процессе работы приложения свойства name и age в компоненте изменят свое значение, то также изменится значение в разметке html, которая привязана к этим свойствам.

Привязка свойств элементов html¶

Мы можем привязать значение к свойству элемента html. В этом случае свойство указывается в квадратных скобках:

Хотя в данном случае мы могли бы написать и так:

Но важно понимать, что здесь идет привязка не к атрибуту, а именно к свойству элемента в javascript, который представляет данный элемент html. Например, мы могли бы привязать некоторое значение к текстовому содержимому элемента:

Привязка к событию¶

Привязка к событию позволяет связать с событием элемента метод из компонента:

что такое binding или двустороннее связывание. binding 2. что такое binding или двустороннее связывание фото. что такое binding или двустороннее связывание-binding 2. картинка что такое binding или двустороннее связывание. картинка binding 2.

В качестве альтернативы мы могли бы установить привязку к событию так:

После префикса on через дефис идет название события.

$event — это встроенный объект, через который Angular передает информацию о событии.

Двусторонняя привязка¶

Двусторонняя привязка позволяет динамически менять значения на одном конце привязки при изменениях на другом конце. Как правило, двусторонняя привязка применяется при работе с элементами ввода, например, элементами типа input. Например:

В итоге изменения в текстовом поле будут сказываться на тексте во втором текстовом поле и параграфе:

Источник

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

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