Ember: Obtenir des données de modèle dans le contrôleur

voix
0

Je suis nouveau à Ember et je fais construire une feuille de personnage DnD pour apprendre et pratiquer. En ce moment j'ai beaucoup de mal à obtenir l'accès à modéliser les données dans un contrôleur. Après des heures et des heures de postes liés à la lecture, il est tout simplement pas cliquer et je pense que je comprends mal ce que je passe au contrôleur.

En fait ce que je suis en train de faire est de données d'appui d'un modèle que je puisse faire des calculs sur eux puis afficher les résultats de ces calculs sur la page.

Voici mes Transforme / router.js:

Router.map(function() {
    this.route('characters', { path: '/'})
    this.route('new', {path: 'new'});
    this.route('view', {path: '/:character_id'});
});

Donc ici, je suis en train de tirer vers le haut de la page d'affichage qui a l'URL de l'identifiant de caractères. Suivant voici ma route pour la page de vue:

export default Route.extend({
    character: function () {
       return this.store.findRecord('character', id)
    }
});

Donc, c'est de trouver le record du caractère avec l'id je passe. Mon lien ressemble à ceci et vient d'un composant:

    <h5 class=card-title>{{#link-to 'view' id}}{{name}}{{/link-to}}</h5>

Maintenant, j'ai mon contrôleur pour la page de vue, qui ressemble à ceci:

init(id){
    let character = this.get('character')
}

Quand je tente de me connecter caractère, il est encore non défini. Lorsque vous cherchez des informations Ember dans les outils de dev, il semble que la page est obtenir l'information à partir du modèle après que j'actualisez la page, mais il me semble juste ne peut pas être comprendre comment saisir cette information dans le contrôleur lui-même pour le manipuler.

J'ai essayé de comprendre cela pour un certain temps maintenant, et ça devient assez frustrant. J'ai actuellement un travail autour où je fais les calculs au préalable et juste stocker tous les résultats calculés dans le modèle aussi bien, mais je suis quand j'apprends que pour comprendre comment cela fonctionne. Merci d'avance est.

Edit: Comme indiqué dans les commentaires ci-dessous je manque laissé lors de la définition de caractère.

Créé 20/10/2018 à 03:28
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Votre crochet modèle semble erroné. Vous utilisez , idmais jamais le définir. Probablement ce que vous voulez est plus comme ceci:

character(params) {
  return this.store.findRecord('character', params.character_id);
}

Suivant votre initcrochet n'a pas de sens:

init(id){
  let character = this.get('character')
}

Tout d' abord , il n'y a pas idpassé au crochet init. Deuxièmement , vous êtes absent this._super(...arguments)qui devrait toujours être appelée lorsque vous substituez init.

Dernier est que votre contrôleur est d' abord créé et plus tard peuplé avec le modèle. De plus , le modèle est peuplé comme la modelpropriété, non character.

Ainsi, vous pouvez placer dans votre modèle de routes et il va fonctionner:

This is character {{model.id}}

Ou si vous voulez changer quelque chose avant de passer au modèle que vous devez utiliser une propriété calculée dans votre contrôleur:

foo: computed('model.id', function() {
  return this.get('model.id') + ' is the id of the character';
}),

Toutefois , pour ce code pour vous exécuter besoin d'utiliser. La meilleure façon de l' utiliser est de le mettre dans votre modèle:

{{foo}}
Créé 20/10/2018 à 14:03
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more