1 min read

Ember.js 一个模型包含多种对象

Note:本文基于 Ember.js 1.4.0

如果看 Ember.js 教程1,可以发现,一个路由对应的模型里,对象是只有一种的,比如这样2

App.PersonRoute = Ember.Route.extend({
  model: function() {
    return App.Person.findAll();
  },
  setupController: function(controller, model) {
    controller.set('model', model);
  }
});

应该说,这是 Ember.js 框架适用的情景。

但某些情况下,你希望 model 不仅仅是一种对象,而是多种对象集合,则可以有两种选择:

  1. 放弃 Ember.js,因为它已经不太适用这种较传统的页面
  2. 已经用了 Ember.js,骑虎难下

项目做到一半结果要放弃整个框架,只能说前期对 Ember.js 的适用情形了解不足。但走到这一步,要砍掉重来却不现实。

Ember.js 提供有 Ember.RSVP.hash 方法3,用法如下:

App.PersonRoute = Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({ // 这里 model 对象包含两种子对象 allPerson 与 task
      allPerson: App.Person.findAll(),
      task: $.get('http://www.zfanw.com/api/task')
    });
  },
  setupController: function(controller, model) {
    controller.set('model', model);
  }
});

模板里使用调用 model.allPersonmodel.task 即可。

报告问题 修订