34 votes

EmberJS définit plusieurs propriétés à la fois

Je configure beaucoup de propriétés avec une série d'appels de set, par exemple.

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

Existe-t-il un moyen de faire cela en un seul appel (comme lorsque je crée un objet) ? Par exemple

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

Je n'ai toujours pas compris le modèle d'héritage d'Ember. Peut-être quelque chose du genre reopen ?

56voto

oruen Points 533

Il existe en fait une fonction pour cela : setProperties . Vous pouvez l'utiliser comme ceci :

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

obj doit être une instance de Ember.Object .

28voto

Luke Melia Points 5887

Comme le souligne @oruen dans sa réponse correcte vous décrivez setProperties(...).

Un problème potentiel dont il faut être conscient est que, selon la spécification JS, l'ordre des propriétés d'un objet est indéterminé. (Voir Ordre des éléments dans une boucle "for ( in )". ).

Si vous ne vous souciez pas de l'ordre, ou si vous êtes sûr que les implémentations JS que vous ciblez respecteront votre ordre, setProperties devrait vous convenir.

Lorsque vous définissez plusieurs propriétés, vous devez envisager d'utiliser Ember.beginPropertyChanges() y Ember.endPropertyChanges() . Le premier suspend les déclencheurs de l'observateur et le second les restaure et les vide. Cette approche peut améliorer les performances. setProperties le fait pour vous.

A noter également Ember.changeProperties qui accepte un callback et appelle Ember.beginPropertyChanges, puis votre callback, et enfin Ember.endPropertyChanges, même si votre callback a soulevé une exception. Exemple d'utilisation :

Ember.changeProperties(function() {
  obj1.set('foo', mayBlowUpWhenSet);
  obj2.set('bar', baz);
});

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X