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



我有一个处理用户身份验证并通过模型获取用户数据的服务。它获取的数据之一是饮食计划开始的日期。我想使用此日期来计算一个数字:自程序开始以来的天数,因此我可以使用该数字查询从 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))
})

并将模板替换为:

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

它不会响应activeCleanse为假(模板似乎只是在检查其是否存在(,并且日期标签仅显示[object Object]

我实际上正在尝试在控制器中获取日期,以便我可以操纵它作为参数之一传递给仪表板路由,该路由根据特定日期获取模型:

仪表板路由

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

我希望能够根据日期的计算动态设置过滤器的标签。

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

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

不需要bind(this),因为该计算属性将在特定的上下文中调用,在您的示例中this将是控制器。

    当前计算属性
  1. 返回 Promise,计算属性无法识别 Promise。 您可以尝试返回DS.PromiseObject以使其正常工作。
activeCleanse:Ember.computed(function(({ 返回 DS。PromiseObject.create({ promise: this.get('authManager.currentUser'(.then( (user( => { 返回user.cleanse_start; }) }(

在您的情况下,我会说您可以在路由上使用setupController hook,您可以在其中设置activeCleanse属性,

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

最新更新