2

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

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(因为它是查询后端的合法方式)。但因为它不是模型的一部分,所以我不相信这是 ember“应该”工作的方式。

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

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

我还应该提到,当调用 setupController 方法时,这不起作用,因为注入的“模型”参数是 {day:“2013-01-01”} 而不是约会模型数组(我可以解决这个问题但感觉好像我做错了)

4

1 回答 1

0

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

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);                        
    }                                                                          
});
于 2013-10-12T02:08:04.567 回答