EmberJs中的控制器通信

时间:2013-08-31 18:11:22

标签: ember.js

干杯,我还在学习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>

两条路线的控制器都是空的,只是防御

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

IndexRoute


       

ApplicationRoute

我该怎么做,换句话说,如何从控制器访问这些属性?

2 个答案:

答案 0 :(得分: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(...),你可以使用它来获得你需要的任何控制器,请参阅以下更改的{{ 1}}这看起来如何:

IndexRoute

此处更新的示例:http://jsbin.com/EpiqUMi/5/edit

希望它有所帮助。

答案 1 :(得分:0)

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

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

index.js.handlebars

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

更多信息位于guides

更新

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

EmberApp.IndexRoute = Ember.Route.extend

  setupController: (controller, model) ->
    @_super(arguments...)
    Ember.Logger.log(controller.get('controllers.application.title'))