谨防:
您需要注意在模型挂钩中返回多个模型是否合适。问自己这个简单的问题:
- 我的路由是否使用 slug 加载基于 url 的动态数据
:id?IE
this.resource('foo', {path: ':id'}); 
如果你回答是
不要尝试从该路径中的模型钩子加载多个模型!!!原因在于 Ember 处理链接到路由的方式。如果您在链接到该路由 ( {{link-to 'foo' model}}, transitionTo('foo', model))时提供模型,它将跳过模型挂钩并使用提供的模型。这可能是有问题的,因为您期望有多个模型,但只会交付一个模型。这是一个替代方案:
在setupController/afterModel
App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return $.getJSON('/books/' + params.id);
  },
  setupController: function(controller, model){
    this._super(controller,model);
    controller.set('model2', {bird:'is the word'});
  }
});
示例:http : //emberjs.jsbin.com/cibujahuju/1/edit
如果你需要它来阻止转换(就像模型钩子那样)从afterModel钩子返回一个Promise。您需要手动跟踪来自该挂钩的结果并将它们连接到您的控制器。
App.IndexRoute = Ember.Route.extend({
  model: function(params) {
    return $.getJSON('/books/' + params.id);
  },
  afterModel: function(){
    var self = this;
    return $.getJSON('/authors').then(function(result){
      self.set('authors', result);
    });
  }, 
  setupController: function(controller, model){
    this._super(controller,model);
    controller.set('authors', this.get('authors'));
  }
});
示例:http : //emberjs.jsbin.com/diqotehomu/1/edit
如果你回答没有
继续,让我们从路由的模型钩子中返回多个模型:
App.IndexRoute = Ember.Route.extend({
  model: function() {
    return {
           model1: ['red', 'yellow', 'blue'],
           model2: ['green', 'purple', 'white']
    };
  }
});
示例:http : //emberjs.jsbin.com/tuvozuwa/1/edit
如果它需要等待(例如调用服务器,某种Promise)
App.IndexRoute = Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
           model1: promise1,
           model2: promise2
    });
  }
});
示例:http : //emberjs.jsbin.com/xucepamezu/1/edit
在 Ember 数据的情况下
App.IndexRoute = Ember.Route.extend({
  var store = this.store;
  model: function() {
    return Ember.RSVP.hash({
           cats: store.find('cat'),
           dogs: store.find('dog')
    });
  }
});
示例:http : //emberjs.jsbin.com/pekohijaku/1/edit
如果一个是Promise,另一个不是,都很好,RSVP 会很乐意使用这个值
App.IndexRoute = Ember.Route.extend({
  var store = this.store;
  model: function() {
    return Ember.RSVP.hash({
           cats: store.find('cat'),
           dogs: ['pluto', 'mickey']
    });
  }
});
示例:http : //emberjs.jsbin.com/coxexubuwi/1/edit
混合搭配,玩得开心!
App.IndexRoute = Ember.Route.extend({
  var store = this.store;
  model: function() {
    return Ember.RSVP.hash({
           cats: store.find('cat'),
           dogs: Ember.RSVP.Promise.cast(['pluto', 'mickey']),
           weather: $.getJSON('weather')
    });
  }, 
  setupController: function(controller, model){
    this._super(controller, model);
    controller.set('favoritePuppy', model.dogs[0]);
  }
});
示例:http : //emberjs.jsbin.com/jorauxuca/1/edit