En En

Привязки


В отличие от большинства других фреймворков, в которых реализованы своего рода привязки, в Ember.js привязки можно использовать с любым объектом. Тем не менее привязки чаще всего используют в рамках самого фреймворка Ember. C большинством проблем в приложениях Ember разработчики справляются с помощью вычисляемых свойств.

Самый простой способ создать двустороннюю привязку — использовать computed.alias(), который определяет путь к другому объекту.

husband = Ember.Object.create({
  pets: 0
});

Wife = Ember.Object.extend({
  pets: Ember.computed.alias('husband.pets')
});

wife = Wife.create({
  husband: husband
});

wife.get('pets'); // 0

// Someone gets a pet.
husband.set('pets', 1);
wife.get('pets'); // 1

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

Однонаправленные привязки

Однонаправленная привязка передает изменения только в одном направлении с помощью computed.oneWay(). Чаще всего однонаправленные привязки нужны для оптимизации производительности. Но вы без проблем можете использовать и двунаправленную привязку (двунаправленные привязки служат однонаправленными, если вы производите изменения только на одной стороне). Иногда лучше использовать однонаправленные привязки, чтобы добиться особого поведения. Например, возможности переопределить значение по умолчанию, которое соответствует еще одному свойству (адрес доставки такой же, как адрес выставления счета, но позднее его можно изменить).

user = Ember.Object.create({
  fullName: 'Kara Gates'
});

UserComponent = Ember.Component.extend({
  userName: Ember.computed.oneWay('user.fullName')
});

userComponent = UserComponent.create({
  user: user
});

// Changing the name of the user object changes
// the value on the view.
user.set('fullName', 'Krang Gates');
// userComponent.userName will become "Krang Gates"

// ...but changes to the view don't make it back to
// the object.
userComponent.set('userName', 'Truckasaurus Gates');
user.get('fullName'); // "Krang Gates"

Комментарии (1)

  1. gubber 28 сентября 2016, 07:49 # 0
    Привязки на свойства объектов это хорошо. А вот как правильно сделать двустороннюю свзяь с текстовым полем для ввода?
    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.