1

干杯,我还在学习 EmberJS 我目前正在使用最新版本的 RC8。我有这个问题

EmberApp.IndexRoute = Ember.Route.extend(setupController: (controller) ->
# Set the IndexController's `title`
controller.set "title", "IndexRoute"
)

EmberApp.ApplicationRoute = Ember.Route.extend(
setupController: (controller, model) ->
# Set the IndexController's `title`
    controller.set "title", "ApplicationRoute"  
)

这是 Index.js.handlebars

<h1>{{title}}</h1>
<h1>{{EmberApp.ApplicationController.title}}</h1>

两条路由的Controllers都是空的,只是防御

我想要做的是打印以下内容

索引路由


申请路线

我怎样才能做到这一点,换句话说,我怎样才能从控制器访问这些属性?

4

2 回答 2

3

ApplicationRoute是最顶层的路由,也就是你的应用程序的路由,它是你的应用程序中IndexRoute的第一个路由,所以基本上如果你{{outlet}}的应用程序模板中有一个,那么默认情况下索引模板将被渲染到这里。

您的示例显示的是IndexRoute第一个,然后是ApplicationRoute,您确定要反过来吗?

假设你不这样做是这样的:

申请模板

<script type="text/x-handlebars">
  <h4>{{controller.title}}</h4>
  {{outlet}}
</script>

索引模板

将被挡板进入应用程序模板出口

<script type="text/x-handlebars" id="index">
  <h4>{{controller.title}}</h4>
</script>

索引路由

App.IndexRoute = Ember.Route.extend({
  setupController: function(controller, model){
    controller.set('title', 'IndexRoute');
  }
});

申请途径

App.ApplicationRoute = Ember.Route.extend({
  setupController: function(controller, model){
    controller.set('title', 'ApplicationRoute');
  }
});

这里的工作示例:http: //jsbin.com/EpiqUMi/2/edit

更新以响应您的最后评论

一开始我并没有意识到你在哪里,但是你在哪里寻找的方法是this.controllerFor(...)在一个路由中调用的,你可以使用它来获取你需要的任何控制器,请参阅以下内容更改IndexRoute了它的外观:

App.IndexRoute = Ember.Route.extend({
  setupController: function(controller, model){
    var otherTitle = this.controllerFor('application').get('title');
    controller.set('title', 'IndexRoute & ' + otherTitle);
  }
});

这里更新的例子:http: //jsbin.com/EpiqUMi/5/edit

希望能帮助到你。

于 2013-08-31T18:27:04.347 回答
0

使用控制器上的needs属性来指定对另一个控制器的依赖。

EmberApp.IndexController = Ember.Controller.extend
  needs: ['application']

index.js.handlebars

<h1>{{title}}</h1>
<h1>{{controllers.application.title}}</h1>

更多信息在指南中。

更新

如果您想从路由访问属性,可以使用相同的技术。可以在控制器上使用从模板中使用的相同路径。模板的默认上下文控制器。

EmberApp.IndexRoute = Ember.Route.extend

  setupController: (controller, model) ->
    @_super(arguments...)
    Ember.Logger.log(controller.get('controllers.application.title'))
于 2013-09-01T00:57:07.970 回答