Ich möchte eine reaktive Array-Eigenschaft in einer Komponente definieren, so dass bei jeder Aktualisierung des Arrays der erforderliche HTML-Inhalt automatisch aktualisiert wird.Emberjs Das Erhalten der Array-Eigenschaft gibt undefined zurück
Ich dachte, das würde einfach sein, aber es hat nicht so funktioniert, wie ich es erwartet hatte. Jedes Mal, wenn ich die Eigenschaft über this.get('array')
abruft, wird undefined
zurückgegeben.
// components/test-component.js
export default Ember.Component.extend({
_array: [],
array: Ember.computed('_array',{
get(key) { return this.get('_array'); },
set(key,value) { this.set('_array', value); }
}),
isEmpty: Ember.computed('array', function() {
// Here, this.get('array') returns undefined. Why?
return this.get('array').length;
}),
actions: {
addNew() {
this.get('array').push(Date.now());
}
},
init() {
this._super(...arguments);
this.set('array', [1,2,3]);
},
});
Ich habe auch bemerkt, dass in der init
Methode, wenn ich die Array-Eigenschaft direkt nach dem Abbinden es abrufen, es undefined
auch zurückgibt. Warum passiert dies?
Hier ist ein twiddle. Es soll das Array iterieren und eine Liste aller Elemente anzeigen, aber es stürzt momentan ab, weil es undefined zurückgibt.
Sie nur jemals brauchen 'Ember.A', wenn Sie haben Prototyp Erweiterungen deaktiviert. –
@PatsyIssa bedeutet das, dass standardmäßig der native 'Array' seinen Prototyp um Ember erweitert hat (mit anderen Worten, ein' Array' Objekt ist standardmäßig ein Ember Array)? –
Korrigieren Sie, bis [ember-disable-prototyp-extensions] (https://github.com/ember-cli/ember-disable-prototype-extensions) installiert ist. –