如何在路线中使用服务属性?

我有一个服务来处理用户身份validation,并通过模型获取用户数据。 它提取的数据之一是开始饮食计划的date。 我想使用这个date来计算一个数字:自程序开始以来的天数,所以我可以使用该数字来查询从CMS中获取内容的不同模型。

我无法访问除模板以外的任何地方的号码。

这是仪表板控制器

import Ember from 'ember'; export default Ember.Controller.extend({ authManager: Ember.inject.service('session'), }); 

这是模板

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

所有上面的代码工作,但是当我在控制器中尝试这样的事情:

  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)) }) 

并将模板replace为:

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

它不响应activeCleanse为false(该模板似乎只是检查其存在),date标签只显示[object Object]

我实际上是试图在控制器中获取date,以便我可以将其作为parameter passing给仪表板路线,从而获取基于特定date的模型:

仪表板路线

 import Ember from 'ember'; export default Ember.Route.extend({ model() { return this.get('store').queryRecord('cleanse-post', { filter: { tag: 'day-1' } }); }, }); 

我希望能够根据date的计算dynamic设置filter的标记。

任何帮助,将不胜感激。 我觉得我一直在这个圈子,我不知道该怎么尝试。

  1. activeCleanse它的计算属性取决于authManager.currentUser ,所以你的计算属性格式应该是这样的
      activeCleanse:Ember.computed('authManager.currentUser',function(){
       //返回结果
      }),

没有必要bind(this)因为计算的属性将被调用特定的上下文,在你的例子中this将是控制器。

  1. 目前您的计算属性正在返回Promise,计算属性不是承诺意识。 您可以尝试返回DS.PromiseObject使其工作。
     activeCleanse:Ember.computed(函数(){
        返回DS.PromiseObject.create({
          承诺:this.get('authManager.currentUser')。then((user)=> {
            返回user.cleanse_start;
           })
       })

在你的情况下,我会说你可以在路由上使用setupController钩子,在那里你可以设置activeCleanse属性,

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