2017-07-31 1 views
1

J'ai un service qui gère l'authentification de l'utilisateur et obtient les données de l'utilisateur via un modèle. L'une des données qu'il récupère est une date pour le début d'un programme diététique. Je veux utiliser cette date pour calculer un nombre: le nombre de jours depuis le début du programme, donc je peux utiliser ce nombre pour interroger un modèle différent qui tire le contenu d'un CMS.Comment utiliser une propriété de service dans un itinéraire?

Je n'ai pas pu accéder à ce numéro ailleurs que sur un modèle.

C'est le contrôleur pour Dashboard

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    authManager: Ember.inject.service('session'), 
    }); 

Ceci est le modèle

{{#if authManager.currentUser.activeCleanse}} 
    You are on a cleanse that starts 
{{authManager.currentUser.cleanse_start}} 
    {{else}} 
    You are not on a cleanse. 
{{/if}} 

Tout le code ci-dessus fonctionne, mais lorsque je tente quelque chose comme ça dans le contrôleur:

activeCleanse: Ember.computed(function(){ 
    return this.get('authManager.currentUser').then((user) => { 
    return user.cleanse_active; 
    }.bind(this)) 
    }), 

    startDate: Ember.computed(function(){ 
    return this.get('authManager.currentUser').then((user) => { 
    return user.cleanse_start; 
    }.bind(this)) 
    }) 

Et remplacer le modèle avec:

{{#if activeCleanse}} 
    You are on a cleanse that starts {{startDate}} 
    {{else}} 
    You are not on a cleanse. 
{{/if}} 

Il ne répond pas à activeCleanse être faux (le modèle ne semble être la vérification de son existence) et l'étiquette de ce jour montre que [object Object].

Je suis en train d'essayer d'obtenir la date dans le contrôleur afin que je puisse le manipuler pour passer comme l'un des paramètres à la route du tableau de bord, qui obtient un modèle basé sur la journée spécifique:

Le tableau de bord Route

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model() { 
    return this.get('store').queryRecord('cleanse-post', { 
     filter: { 
     tag: 'day-1' 
     } 
     }); 
    }, 

}); 

Je veux être en mesure de définir dynamiquement la balise pour le filtre basé sur le calcul de la date.

Toute aide serait appréciée. J'ai l'impression d'avoir tourné en rond avec ça et je n'ai aucune idée de ce qu'il faut essayer.

Répondre

0
  1. activeCleanse il est bien calculé dépend authManager.currentUser, de sorte que votre format de propriété calculée devrait être comme celui-ci
 
    activeCleanse: Ember.computed('authManager.currentUser',function(){ 
     //return the result 
    }), 

Il n'y a pas besoin de bind(this) puisque cette propriété calculée sera appelée avec contexte particulier, votre exemple this serait contrôleur.

  1. Actuellement, votre propriété calculée renvoie Promise, la propriété calculée ne tient pas compte des promesses. vous pouvez essayer de retourner DS.PromiseObject pour le faire fonctionner.
 
    activeCleanse:Ember.computed(function(){ 
     return DS.PromiseObject.create({ 
      promise: this.get('authManager.currentUser').then((user) => { 
      return user.cleanse_start; 
      }) 
     }) 

Dans votre cas, je dirais que vous pouvez utiliser crochet setupController sur la route, où vous pouvez définir activeCleanse propriété,

this.get('authManager.currentUser').then((user) => { 
    this.set('activeCleanse,user.cleanse_active); 
}); 
+0

Merci pour la clarification, mais votre solution ne semble pas travailler.Le hook 'setupController()' ne semble pas avoir d'effet du tout. Maintenant, le modèle ne reconnaît même pas l'existence de la propriété 'activeCleanse'. J'ai aussi essayé de faire rendre une promesse au contrôleur, mais cela n'a pas non plus donné de résultats. –

+0

Désolé, je n'ai pas vu le code que vous avez fourni. J'ai mis cela dans le contrôleur et maintenant je reçois une erreur 'TypeError: Impossible de lire la propriété '_attributes' de undefined'. Aucune idée de ce à quoi cela fait référence mais le contrôleur est tout ce qui a changé. Merci encore pour votre aide. –

+0

J'ai mis à jour le code au second point. Je ne suis pas au courant de ce que cette promesse 'this.get ('authManager.currentUser')' retournera. Assurez-vous que vous recevez le 'user.cleanse_start' correctement. – kumkanillam