在ember.js中路由非模型参数的惯用方法是什么?

时间:2013-10-12 00:39:42

标签: ember.js

我有一条路线,我想过滤商店,但它使用的是不属于模型本身的属性

App.Appointment = DS.Model.extend({                                                      
    details: attr('string')                                         
});

App.Router.map(function(match) {                                               
    this.resource("appointments", { path: "/appointments" }, function() {      
        this.route("index", { path: "/:day/all" });                
    });                                                                        
});

当我点击此路线的模型方法时,我只是使用这个“day”属性查询api(因为它是查询后端的合法方式)。但是因为它不是模型的一部分,所以我不相信这是“应该”工作的方式。

App.AppointmentsIndexRoute = Ember.Route.extend({
    model: function(params) {
        return this.store.find('appointment', params);
    }
});

我应该如何为不暴露像这样的模型属性的ember模型编写路由?

我还应该提一下,调用setupController方法时效果不好,因为注入的“模型”参数是{day:“2013-01-01”}而不是一组约会模型(我可以破解这个,但感觉我做错了)

1 个答案:

答案 0 :(得分:0)

我发现创建一个哈希对象解决了这个问题(因此,在支持查询参数之前,这是一个很好的解决方案,感觉不那么笨拙)

App.AppointmentsIndexRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.RSVP.hash({
      appointments: this.store.find('appointment', params),
      day: params.day
    });
  },
  setupController: function(controller, model) {
    controller.set('model', model.get('appointments'));
    controller.set('day', model.get('day'));
  }
});

我还应该表明,如果你创建一个linkTo帮助器或转换到这条路线,你需要这样做

App.IndexRoute = Ember.Route.extend({                                          
    redirect: function() {                                                     
        var now = new Date();                                                  
        var today = moment(now).format('YYYY-MM-DD');                          
        this.transitionTo('appointments.index', today);                        
    }                                                                          
});