2016-08-02 27 views
0

Ich bin vor kurzem von Ember 1.x auf 2.6 verschoben. Ich kann addObject/pushObject nicht wie früher verwenden.Ember: addObject/pushObject ist keine Funktion

Ember  : 2.6.2 
jQuery  : 2.2.4 

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    test: ['sibi', 'john'], 

    init: function() { 
     this.get('test').pushObject('sebastian'); 
    } 
}); 

Dies löst einen Fehler wie PushObject ist keine Funktion. Was ist die Problemumgehung? Vielen Dank.

+2

Meine Vermutung ist, dass "[]" kein Ember-kompatibles Array mehr initialisiert (Prototyp-Erweiterungen). Wahrscheinlich müssen Sie dieses Verhalten explizit in Ihrer Konfigurationsdatei zulassen. Versuchen Sie nun, 'test: ['sibi', 'john']' 'ember.Array zu ersetzen:' test: Ember.A (['sibi', 'john']) ' – Pavol

+2

Als zufällige Randnotiz ist es generell schlecht Übung zum Hinzufügen eines Array-Verweises zu einer Klassendefinition. Alle Instanzen dieser Klasse teilen denselben Verweis auf dieses Array. – Kingpin2k

Antwort

7

Die Option für erweiterte Prototypen war aus irgendeinem Grund falsch. Sie können mehr über das Deaktivieren von Prototyp-Erweiterungen in der guide lesen.

EmberENV: { 
     EXTEND_PROTOTYPES: { 
     Array: true 
     } 
    } 

Vielen Dank!

4

Überprüfen Sie Ihre package.json gegen ember-disable-prototype-extensions.

Wenn Ihr Projekt ein Addon-Projekt ist, wurde es von ember-cli hinzugefügt. Und du solltest damit leben. (Verwenden Sie Ember.A, wenn Sie ein Ember-Array benötigen.)

Wenn Ihr Projekt ein Anwendungsprojekt ist, entfernen Sie einfach dieses Addon.

+0

Das war nicht der Fall. Das Aktivieren der erweiterten Prototypen-Option war was für mich funktionierte. –

+0

Warum wurde es dann deaktiviert? Standardmäßig muss es aktiviert sein. – ykaragol

+0

da bin ich mir nicht sicher. Meine package.json hatte den Eintrag "ember-disable-prototyp-extensions" nicht. –