EmberJS一次设置多个属性

时间:2012-01-06 02:51:13

标签: ember.js

我通过一系列设置调用设置了许多属性,例如。

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

有没有办法在一次调用中执行此操作(类似于创建对象时)? E.g。

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

我仍然没有完全理解Ember的继承模型。也许是reopen

的内容

2 个答案:

答案 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);
});

希望有所帮助!