我通过一系列设置调用设置了许多属性,例如。
this.set('prop1', value1);
this.set('prop2', value2);
.......
有没有办法在一次调用中执行此操作(类似于创建对象时)? E.g。
this.setMultiple({prop1: value1, prop2: value2});
我仍然没有完全理解Ember的继承模型。也许是reopen
?
答案 0 :(得分:55)
实际上有一个功能:setProperties
。您可以像这样使用它:
obj.setProperties({prop1: value1, prop2: value2})
obj
应该是Ember.Object
的实例。
答案 1 :(得分:28)
正如@oruen指出in his correct answer,你正在描述setProperties(...)。
需要注意的一个潜在问题是,根据JS规范,对象的属性顺序是不确定的。 (见Elements order in a "for (… in …)" loop)。
如果您不关心订单,或者确信您要定位的JS实施会尊重您的订单,那么setProperties应该适合您。
设置多个属性时,应考虑使用 Ember.beginPropertyChanges()和 Ember.endPropertyChanges()。前者暂停观察者触发器,后者恢复它并冲洗。这种方法可以提高性能。 setProperties为你做这件事。
另外值得注意的是 Ember.changeProperties ,它接受回调并调用Ember.beginPropertyChanges,然后调用回调,然后调用Ember.endPropertyChanges,即使你的回调引发了异常。用法示例:
Ember.changeProperties(function() {
obj1.set('foo', mayBlowUpWhenSet);
obj2.set('bar', baz);
});
希望有所帮助!