Ответ 1
Для этого существует функция: setProperties
. Вы можете использовать его следующим образом:
obj.setProperties({prop1: value1, prop2: value2})
obj
должен быть экземпляром Ember.Object
.
Я устанавливаю множество свойств с серией заданных вызовов, например.
this.set('prop1', value1);
this.set('prop2', value2);
.......
Есть ли способ сделать это в одном вызове (подобно тому, как я создаю объект)? Например.
this.setMultiple({prop1: value1, prop2: value2});
Я все еще не полностью изучаю модель наследования Ember. Может быть, что-то похожее на reopen
?
Для этого существует функция: setProperties
. Вы можете использовать его следующим образом:
obj.setProperties({prop1: value1, prop2: value2})
obj
должен быть экземпляром Ember.Object
.
Поскольку @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);
});
Надеюсь, что это поможет!