除非您首先访问所需的控制器路径,否则Ember'needs'属性不起作用

时间:2014-05-29 19:31:57

标签: javascript ember.js

我发现了一些与Ember'需求相关的问题。控制器属性或我不了解实现目标的正确方法。

目标是能够从另一个控制器访问一个或多个控制器的内容。

例如,我有一条路线所有账户需要访问银行账户和信用账户的内容,以便它可以显示所有账户:)

问题是那些控制器的内容总是空的,除非您首先访问银行和信用帐户路线!

这是一个说明问题的jsbin:

http://jsbin.com/yubul/1/edit?html,js,output

1 个答案:

答案 0 :(得分:2)

当您访问需要它的路线时,控制器只会自动填充它的模型。控制器可以不带模型存在。 needs通常只应发生在上游,而不是兄弟资源/路线。

如果资源依赖于另一个资源,那么它应该是您的嵌套结构的一部分,或者同时获取。

this.resource('accounts', function(){
  this.resource('bank-accounts');
  .....
});

通常在您不一定需要嵌套路由的用例中,但是您确实需要多个资源,我从单个路由返回多个资源,或者在setupController挂钩中设置多个控制器。 / p>

具有多个模型(属性)的模型

App.FooRoute = Em.Route.extend({
  model: function(){
    return Em.RSVP.hash({
       cars: this.store.find('car'),
       dogs: this.store.find('dog')
    });
  }
});

使用上述技术,您的控制器将是一个ObjectController,它具有两个属性carsdogs,每个属性都是一个集合。

setupController设置多个模型

App.FooRoute = Em.Route.extend({
  model: function(){
    return this.store.find('car');
  },
  setupController: function(controller, model){
    // this._super does the default implementation of setupController
    this._super(controller, model);
    this.controllerFor('dogs').set('model', this.store.find('dog'));
  }
});

或者你可以在中间,混合和匹配中做点什么。