EmberJS一次设置多个属性

ghe*_*ton 33 ember.js

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

this.set('prop1', value1);
this.set('prop2', value2);
.......
Run Code Online (Sandbox Code Playgroud)

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

this.setMultiple({prop1: value1, prop2: value2});
Run Code Online (Sandbox Code Playgroud)

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

oru*_*uen 55

实际上有一个功能:setProperties.你可以像这样使用它:

obj.setProperties({prop1: value1, prop2: value2})
Run Code Online (Sandbox Code Playgroud)

obj应该是的例子Ember.Object.


Luk*_*lia 28

正如@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);
});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!