我正在构建ember app,我在顶部和几个标签上都有日期选择器。每个选项卡代表一个可以使用的模型,但所有模型都需要日期选择器。因此,我将日期选择器值存储为applicationController
属性,并且我已经达到需要使用store.query("Model", {date: applicationController.date})
加载数据的点,现在我已经丢失了。如果我使用带有钩子的ModelController:
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
属性传递给Route并使其观察更改?
答案 0 :(得分:0)
谢谢,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
引起的用户交互的模型!