2017-11-21 3 views
0

Ich bin neu zu Ember kommt von reagieren. Innerhalb der routes/application.js möchte ich einen "state" Hash verwenden, um Variablen außerhalb der unterstützenden Funktionen, model() und actions() zu halten. HierEmber 2.16 Fehler beim Erstellen eines Status-Hash in Routen/Anwendung

ist, was funktioniert:

session: Ember.inject.service(), 
    servers: null, 
    clients: null, 
    variable3: null, 
    variable4: null, 
    variable3_id: null, 
    selectedDate: null, 
    currentUser: Ember.inject.service(), 

und das ist, was ich tun möchte:

state: { 
    session: Ember.inject.service(), 
    servers: null, 
    clients: null, 
    variable3: null, 
    variable4: null, 
    variable3_id: null, 
    selectedDate: null, 
    currentUser: Ember.inject.service(), 
}, 

Als ich darauf zugreifen mit, sagen wir bekommen, get(this, 'state.session') ich diesen Fehler:

ember.debug.js:29034 Error while processing route: analytics Assertion Failed: Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container. Error: Assertion Failed: Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.

Wenn ich nicht die Variablen in meine state Hash und Zugriff mit get, get(this, 'session') Ich bekomme keine Probleme. Was geht hier vor sich? Habe ich genug Informationen zur Verfügung gestellt oder fehle ich etwas?

Danke

Antwort

1

Willkommen bei ember.js.

Wie in der Fehlermeldung erwähnt, state wird nicht von Ember-Container erstellt daher ember kann keinen Dienst zu injizieren. Controller, Dienste, Routen, Komponenten, Instanzinitialisierer werden von ember erstellt, nicht jedoch von einfachen Objekten.

Verwenden Sie eine Komponente oder einen Controller, um state zu halten. Sie müssen kein separates Statusobjekt verwenden. Die s Eigenschaften sind sein Zustand tatsächlich.

Auf der anderen Seite, sollte keine service (die meisten Singleton) nicht der Zustand von etwas sein.

Schließlich gibt es natürlich Möglichkeiten, diese service s zu diesem state Objekt hinzuzufügen. Aber das ist nicht der übliche Gebrauch.

+1

Danke für Ihre freundliche @ Ykaragol! – Lefty

+1

Ein besseres zu verwendendes Wort wäre _props für Routeneigenschaften anstelle von state. Ich habe mir die Dienste angesehen und es sieht so aus, als ob der beste Weg für mich darin besteht, eine lange Liste von Eigenschaften vor den Routen zu akzeptieren. – Lefty

Verwandte Themen