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

时间:2017-07-31 22:12:23

标签: javascript node.js ember.js ember-data

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

答案 0 :(得分:0)

  1. activeCleanse它的计算属性取决于authManager.currentUser,因此您的计算属性格式应该是这样的
  2.      activeCleanse: Ember.computed('authManager.currentUser',function(){
          //return the result
         }),
    

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

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

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

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