2017-05-11 2 views
0

J'ai de gros problèmes avec EmberJS. J'utilise Ember.RSVP.hash pour charger plusieurs des modèles comme celui-ci:Ember - passant la variable de la route au contrôleur

route:

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

Puis, dans mon contrôleur, je suis en train d'accéder à ce modèle comme celui-ci param:

contrôleur:

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

Ma console doit se connecter 'exemple de texte' mais UNFOR peu à peu je reçois 'undefined'

Est-ce provoqué par la méthode init que j'ai utilisée? Je veux remarquer que j'ai besoin d'avoir accès à ce param immédiatement après avoir chargé cette page d'itinéraire.

Répondre

0

Utilisez setupController crochet route.js il sera appelé après crochet de modèle, vous obtiendrez controller et model par exemple dans l'argument, de sorte que vous pouvez avoir accès à modéliser les propriétés et les propriétés du contrôleur Définie en fonction de model.

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

init sera appelé avant crochet model finition de l'exécution afin que vous ne pouvez pas accéder this.get('model.test') comme vous l'avez fait.

+0

J'ai oublié d'écrire que j'ai aussi setupController comme le vôtre, mais cela ne fonctionne toujours pas comme prévu. Ok. Alors comment puis-je accéder à ce param? – kamrza

+0

Où voulez-vous accéder aux paramètres? (c'est-à-dire, vous voulez dire que les paramètres sont 'modèle') – kumkanillam

+0

@kamrza Que voulez-vous faire en accédant à' model.test' dans le contrôleur? Si vous voulez cette propriété dans le modèle, vous pouvez y accéder directement. Si vous voulez faire une décoration à 'model.test', créez une propriété calculée et renvoyez cette valeur. vous pouvez utiliser cette propriété calculée dans le modèle – kumkanillam

0

Il est probable que l'objet Contrôleur parent doive effectuer une configuration avant de pouvoir accéder aux attributs du modèle. Effectuez les opérations suivantes:

Contrôleur

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

The Ember docs peut vous fournir des informations supplémentaires dont vous avez besoin.

En outre, le contrôleur est le plus susceptible d'être construit avant que les promesses de votre modèle aient été résolues. Dans ce cas, vous devrez utiliser computed properties qui se mettra à jour chaque fois que les attributs utilisés auront changé de valeur au moment où vous essayez d'accéder à la propriété calculée.