如何在路线中使用服务属性?
我有一个服务来处理用户身份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的标记。
任何帮助,将不胜感激。 我觉得我一直在这个圈子,我不知道该怎么尝试。
-
activeCleanse
它的计算属性取决于authManager.currentUser
,所以你的计算属性格式应该是这样的
activeCleanse:Ember.computed('authManager.currentUser',function(){ //返回结果 }),
没有必要bind(this)
因为计算的属性将被调用特定的上下文,在你的例子中this
将是控制器。
- 目前您的计算属性正在返回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); });