У меня есть служба, которая обрабатывает аутентификацию пользователя и получает данные пользователя через модель. Одна из данных, которую он получает, - это дата начала диетической программы. Я хочу использовать эту дату для вычисления числа: количество дней с момента запуска программы, поэтому я могу использовать этот номер для запроса другой модели, которая извлекает контент из 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'
}
});
},
});
Я хочу иметь возможность динамически устанавливать тег для фильтра на основе расчета даты.
Любая помощь будет оценена по достоинству. Я чувствую, что я собираюсь в кругах с этим, и я понятия не имею, что попробовать.
activeCleanse
вычисленное свойство зависит от authManager.currentUser
, поэтому ваш формат вычисленного свойства должен быть такимactiveCleanse: Ember.computed('authManager.currentUser',function(){ //return the result }),
Нет необходимости bind(this)
поскольку это вычислимое свойство будет вызываться с конкретным контекстом, в вашем примере this
будет контроллер.
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);
});
setupController()
, кажется, не имеет никакого эффекта вообще. Теперь шаблон даже не распознает существование свойстваactiveCleanse
. Я также попытался заставить контроллер вернуть обещание, но это также не дало никаких результатов.TypeError: Cannot read property '_attributes' of undefined
. Понятия не имею, к чему это относится, но контроллер - это все, что изменилось. В очередной раз благодарим за помощь.