ember.js一个控制器/视图更多模型

时间:2014-03-25 00:10:43

标签: ember.js routing

我有几个(简单)模型,如语言,部门等。它们只包含name和id属性(列)。我想制作一个控制器和视图,它控制CRUD功能。我应该如何解决这个问题,为多个模型配备一个控制器?

是否可以从路由变量加载模型?

伪代码

somecontroller / MODELNAME

App.IndexRoute = Ember.Route.extend({
    model: function(modelname) {
        return this.get('store').find(modelname);
    }
});

2 个答案:

答案 0 :(得分:2)

您可以从模型挂钩加载多个模型,并将它们分配给控制器属性。 e.g。

App.IndexRoute = Ember.Route.extend({
  model: function(modelname) {
    var store = this.get('store');
    return Ember.RSVP.hash({
      foos: store.find('foos'),
      bars: store.find('bars')
    });
  },
  setupController: function(controller, model) {
    controller.set('foos', model.foos);
    controller.set('bars', model.bars);
  }
});

Ember.RSVP.hash将返回一个承诺,该承诺等待传递对象的所有属性的promise值,然后将使用具有相同属性名称和promise履行结果的对象作为值来实现。

通过覆盖setupController,您可以确定控制器上设置的属性以及值。

答案 1 :(得分:0)

您可以通过两种方式在路线上获得两个模型

 /*
  * Use the model hook to return model, then
  * setController to set another model
 */
 App.IndexRoute = Ember.Route.extend({
   model: function() {
     return this.store.findAll('languages');
   },
   setupController: function(controller, model) {
     this._super(controller, model);
     controller.set('department', this.store.findAll('department')); 
   }
 });


 /*
  * Can return a Hash of promises from the model hook 
  * and then use those as your models
  */
 App.RsvphashRoute = Ember.Route.extend({
   model: function() {
     return Ember.RSVP.hash({
       langs: this.store.find('languages1'),
       dept: this.store.find('department1')    
     });
   }
 });

这里有 jsbin 。希望它有所帮助:

http://emberjs.jsbin.com/basoneno/1/edit