Can Route模型可以观察applicationController的道具吗?
问题描述:
我正在构建烬应用程序,并在顶部和几个选项卡上有日期选择器。每个选项卡都代表要使用的模型,但所有模型都需要日期选择器。因此,我将日期选择器值存储为applicationController
属性,而且我已经达到了需要使用store.query("Model", {date: applicationController.date})
加载数据的时间点,现在我已经丢失了。如果我使用带有钩子的ModelController:Can Route模型可以观察applicationController的道具吗?
export default Ember.Controller.extend({
appController: Ember.inject.controller('application'),
myNeedData: function() {
this.store.findAll('myNeedData',
{date: this.get('appController').get('selectedUrlDate')}
);
}.property('appController.selectedUrlDate')
})
所有的东西都可以正常工作,但它是一种黑客攻击。所以我需要通过Route的model()
加载模型数据。但是,我怎么能通过applicationController
财产路线,并使其观察到的变化?
答
谢谢,Kitler指出研究的道路。所以我所做的服务
export default Ember.Service.extend({
store: Ember.inject.service(),
loadModel(date) {
// some important actions
}
});
则控制器功能:
export default Ember.Controller.extend({
nextMonth() {
var date = this.get('selectedDate');
date.setMonth(date.getMonth() + 1);
this.set('selectedDate', new Date(date));
},
prevMonth() {
var date = this.get('selectedDate');
date.setMonth(date.getMonth() - 1);
this.set('selectedDate', new Date(date));
},
});
和路线:
export default Ember.Route.extend({
modelService: Ember.inject.service('my-service'),
model() {
return this.prepareModel();
},
setupController: function(controller, model) {
controller.set('model', model);
},
prepareModel() {
const date = this.controllerFor('application').get('selectedUrlDate');
return this.get('modelService').loadModel(date);
},
actions: {
nextMonth() {
const self = this;
self.controllerFor('application').nextMonth();
self.refresh();
},
prevMonth() {
const self = this;
self.controllerFor('application').prevMonth();
self.refresh();
},
}
});
所以现在我有在路由数据处理,而不是重要的重复属性currentDate
及其在应用程序控制器中的操作,以及相应的路由因refresh
而改变了用户交互模型!
您应该使用服务 –
感谢您的回复。我应该在控制器中使用服务,然后留下一条空白路线? –