可以使用Route模型观察applicationController的道具吗?

时间:2016-03-15 18:19:32

标签: ember.js ember-data

我正在构建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并使其观察更改?

1 个答案:

答案 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引起的用户交互的模型!