Как использовать служебное свойство в маршруте?

1

У меня есть служба, которая обрабатывает аутентификацию пользователя и получает данные пользователя через модель. Одна из данных, которую он получает, - это дата начала диетической программы. Я хочу использовать эту дату для вычисления числа: количество дней с момента запуска программы, поэтому я могу использовать этот номер для запроса другой модели, которая извлекает контент из 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 как false (шаблон, похоже, проверяет его существование), а тег даты показывает только [object Object].

Я на самом деле пытаюсь получить дату в контроллере, чтобы я мог манипулировать им, чтобы передать один из параметров на маршрут панели управления, который получает модель, основанную на конкретном дне:

Маршрут Dashboard

import Ember from 'ember';

export default Ember.Route.extend({

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

});

Я хочу иметь возможность динамически устанавливать тег для фильтра на основе расчета даты.

Любая помощь будет оценена по достоинству. Я чувствую, что я собираюсь в кругах с этим, и я понятия не имею, что попробовать.

Теги:
ember.js
ember-data

1 ответ

0
Лучший ответ
  1. activeCleanse вычисленное свойство зависит от authManager.currentUser, поэтому ваш формат вычисленного свойства должен быть таким
     activeCleanse: Ember.computed('authManager.currentUser',function(){
      //return the result
     }),

Нет необходимости bind(this) поскольку это вычислимое свойство будет вызываться с конкретным контекстом, в вашем примере this будет контроллер.

  1. В настоящее время ваше вычисляемое свойство возвращает Promise, вычисленное свойство не обещает. вы можете попробовать вернуть DS.PromiseObject чтобы он работал.
    activeCleanse:Ember.computed(function(){
        return DS.PromiseObject.create({
          promise: this.get('authManager.currentUser').then( (user) => {
            return user.cleanse_start;
          })
      })

В вашем случае, я бы сказал, вы можете использовать hook setupController на маршруте, где вы можете установить свойство activeCleanse,

this.get('authManager.currentUser').then( (user) => {
  this.set('activeCleanse,user.cleanse_active);
});
  • 0
    Спасибо за разъяснения, но, похоже, ваше решение не работает. setupController() , кажется, не имеет никакого эффекта вообще. Теперь шаблон даже не распознает существование свойства activeCleanse . Я также попытался заставить контроллер вернуть обещание, но это также не дало никаких результатов.
  • 0
    Извините, я не видел код, который вы предоставили. Я поместил это в контроллер, и теперь я получаю ошибку TypeError: Cannot read property '_attributes' of undefined . Понятия не имею, к чему это относится, но контроллер - это все, что изменилось. В очередной раз благодарим за помощь.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню