web-dev-qa-db-ja.com

EmberJSが一度に複数のプロパティを設定

一連のセット呼び出しで多くのプロパティを設定しています。

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

1回の呼び出しでこれを行う方法はありますか(オブジェクトを作成するときと同様)?例えば。

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

私はまだEmberの継承モデルを完全には理解していません。たぶんreopenの線に沿った何か?

34
ghempton

実際には、これにはsetPropertiesという関数があります。次のように使用できます。

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

objEmber.Objectのインスタンスである必要があります。

56
oruen

@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);
});

お役に立てば幸いです。

28
Luke Melia