Ich bin mir nicht ganz sicher, ob ich etwas falsch gemacht habe, aber hier ist es.
Ich habe eine Komponente mit einigen Eigenschaften erstellt, die alle im Bereich ihrer Komponenteninstanz korrekt funktionieren. Wenn ich jedoch eine Eigenschaft mit einem Array-Wert hinzugefügt habe, verhält sie sich unerwartet: Wenn ein Element über @set in das Array einer Komponente verschoben .
Ich nehme an, Sie haben so etwas wie:
App.MyThingsComponent = Ember.Component.extend({
things: []
}):
Dadurch wird dieselbe Instanz des Arrays für alle Komponenten verwendet, da sie bei der Definition der Klasse ausgewertet wird, nicht bei der Instanziierung.
Sie können dies beheben, indem Sie das Array instanziieren, wenn die Komponente initialisiert wird:
App.MyThingsComponent = Ember.Component.extend({
things: null,
setupThings: function(){
this.set("things", []);
}.on("init")
}):
Jetzt erhalten Sie für jede Komponenteninstanz eine neue Array-Instanz und die Dinge sollten sich wie erwartet verhalten.
hth
Vielen Dank! Ist dieses Verhalten also beabsichtigt? Wie kommt es, dass das zum Beispiel bei Strings nicht so funktioniert?
@Geokoumpa dies liegt an der prototypischen Vererbung von Javascript. Hier ist ein ausführlicher Blogbeitrag von @wycats , der nützlich ist, um mehr über diesen Aspekt von Javascript zu erfahren.
http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/
Hilfreichster Kommentar
Ich nehme an, Sie haben so etwas wie:
Dadurch wird dieselbe Instanz des Arrays für alle Komponenten verwendet, da sie bei der Definition der Klasse ausgewertet wird, nicht bei der Instanziierung.
Sie können dies beheben, indem Sie das Array instanziieren, wenn die Komponente initialisiert wird:
Jetzt erhalten Sie für jede Komponenteninstanz eine neue Array-Instanz und die Dinge sollten sich wie erwartet verhalten.
hth