Ember.js: Valeur de propriété de tableau partagée entre les instances d'un composant

Créé le 11 déc. 2013  ·  3Commentaires  ·  Source: emberjs/ember.js

Je ne sais pas si j'ai fait quelque chose de mal, mais le voici.
J'ai créé un composant avec certaines propriétés, toutes fonctionnant correctement dans le cadre de leur instance de composant. Cependant, lorsque j'ai ajouté une propriété avec une valeur de tableau, elle se comporte de manière inattendue : lorsqu'un élément est inséré dans le tableau d'un composant via @set , il est

Commentaire le plus utile

Je suppose que vous avez quelque chose comme :

App.MyThingsComponent = Ember.Component.extend({
  things: []
}):

Cela utilisera la même instance du tableau pour tous les composants car elle est évaluée lorsque la classe est définie, et non lorsqu'elle est instanciée.

Vous pouvez résoudre ce problème en instanciant le tableau lorsque le composant est initialisé :

App.MyThingsComponent = Ember.Component.extend({
  things: null,
  setupThings: function(){
    this.set("things", []);
  }.on("init")
}):

Vous obtiendrez maintenant une nouvelle instance de tableau pour chaque instance de composant et les choses devraient se comporter comme prévu.

hth

Tous les 3 commentaires

Je suppose que vous avez quelque chose comme :

App.MyThingsComponent = Ember.Component.extend({
  things: []
}):

Cela utilisera la même instance du tableau pour tous les composants car elle est évaluée lorsque la classe est définie, et non lorsqu'elle est instanciée.

Vous pouvez résoudre ce problème en instanciant le tableau lorsque le composant est initialisé :

App.MyThingsComponent = Ember.Component.extend({
  things: null,
  setupThings: function(){
    this.set("things", []);
  }.on("init")
}):

Vous obtiendrez maintenant une nouvelle instance de tableau pour chaque instance de composant et les choses devraient se comporter comme prévu.

hth

Merci beaucoup! Alors, est-ce un comportement intentionnel ? Comment se fait-il que ça ne marche pas comme ça avec des cordes par exemple ?

@Geokoumpa cela est dû à l'héritage prototypique de Javascript. Voici un article de blog complet de @wycats qui est utile pour en savoir plus sur cet aspect de Javascript.

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/

Cette page vous a été utile?
0 / 5 - 0 notes