2017-05-11 3 views
0

Ich habe große Probleme mit EmberJS. Ich verwende Ember.RSVP.hash mehrere Modelle wie folgt zu laden:Ember - Variable von der Route zum Controller

Route:

model() { 
    const self = this; 
    return Ember.RSVP.hash({ 
     test: 'sample text' 
    }).then((hash) => { 
     return Ember.RSVP.hash({ 
     test: hash.test, 
     }); 
    }, self); 
    } 

Da ist in meinem Controller Ich versuche, dieses Modell param wie diese zuzugreifen:

Controller:

export default Controller.extend({ 
    init() { 
    console.log(this.get('model.test'); 
    } 

sollte Meine Konsole 'Beispieltext' log aber UNFOR glücklicherweise bekomme ich 'undefined'

Wird dies durch init-Methode verursacht, die ich verwendet habe? Ich möchte feststellen, dass ich unmittelbar nach dem Laden dieser Routenseite auf diesen Parameter zugreifen muss.

Antwort

0

Verwenden setupController Haken in route.js wird es nach Modell Hook aufgerufen werden, so werden Sie controller und model Instanz im Argument bekommen, so dass Sie Zugang erhalten können Eigenschaften und legen Sie Controller-Eigenschaften auf model Basis zu modellieren.

setupController(controller,model) 
{ 
controller.setProperites(model); 
    //you can do anything with controller and model instance 
} 

init Methode, bevor Sie model Haken die Ausführung Veredelung genannt werden, so dass Sie es nicht this.get('model.test') zugreifen können wie Sie haben.

+0

Ich habe vergessen zu schreiben, dass ich auch setupController wie Ihres habe, aber es funktioniert immer noch nicht in der Weise, die ich erwartet hatte. Ok. Wie kann ich dann auf diesen Parameter zugreifen? – kamrza

+0

Wo möchten Sie auf Params zugreifen? (dh, Sie meinen, die Parameter sind 'Modell') – kumkanillam

+0

@kamrza Was möchten Sie tun, indem Sie auf den' model.test' im Controller zugreifen?. Wenn Sie diese Eigenschaft in der Vorlage haben möchten, können Sie direkt darauf zugreifen. Wenn Sie "model.test" dekorieren möchten, erstellen Sie die berechnete Eigenschaft und geben Sie diesen Wert zurück. Sie können diese berechnete Eigenschaft in der Vorlage verwenden – kumkanillam

0

Wahrscheinlichkeiten sind, dass das übergeordnete Controller-Objekt einige Einstellungen vornehmen muss, bevor Sie auf Modellattribute zugreifen können. Versuchen Sie Folgendes:

-Controller

export default Controller.extend({ 
    init() { 
     // This line calls the Controller constructor... 
     this._super(...arguments); 
     console.log(this.get('model.test'); 
    } 
}); 

The Ember docs können Sie mit zusätzlichen Informationen, die Sie benötigen.

Darüber hinaus wird der Controller am ehesten gebaut, bevor sich Ihre Modellversprechen aufgelöst haben. In diesem Fall müssen Sie computed properties verwenden, das immer dann aktualisiert wird, wenn die Attribute, auf die Sie sich verlassen haben, den Wert geändert haben, als Sie versuchten, auf die berechnete Eigenschaft zuzugreifen.

Verwandte Themen