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财产路线,并使其观察到的变化?

+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而改变了用户交互模型!