Подтвердить что ты не робот

EmberJS устанавливает несколько свойств сразу

Я устанавливаю множество свойств с серией заданных вызовов, например.

this.set('prop1', value1);
this.set('prop2', value2);
.......

Есть ли способ сделать это в одном вызове (подобно тому, как я создаю объект)? Например.

this.setMultiple({prop1: value1, prop2: value2});

Я все еще не полностью изучаю модель наследования Ember. Может быть, что-то похожее на reopen?

4b9b3361

Ответ 1

Для этого существует функция: setProperties. Вы можете использовать его следующим образом:

obj.setProperties({prop1: value1, prop2: value2})

obj должен быть экземпляром Ember.Object.

Ответ 2

Поскольку @oruen указывает в своем правильном ответе, вы описываете setProperties (...).

Одна потенциальная проблема, о которой следует знать, заключается в том, что согласно спецификации JS порядок свойств объекта неопределен. (См. Порядок элементов в цикле for (... in...) ").

Если вы не заботитесь о заказе или уверены, что реализации JS, на которые вы нацеливаетесь, будут уважать ваш заказ, setProperties должен работать на вас.

При настройке нескольких свойств вы должны использовать Ember.beginPropertyChanges() и Ember.endPropertyChanges(). Первый приостанавливает срабатывания наблюдателя, а второй восстанавливает его и сбрасывает. Такой подход может повысить производительность. setProperties делает это для вас.

Также заметен Ember.changeProperties, который принимает обратный вызов и вызывает Ember.beginPropertyChanges, затем ваш обратный вызов, а затем Ember.endPropertyChanges, даже если ваш обратный вызов вызвал исключение. Пример использования:

Ember.changeProperties(function() {
  obj1.set('foo', mayBlowUpWhenSet);
  obj2.set('bar', baz);
});

Надеюсь, что это поможет!