干杯,我还在学习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>
两条路线的控制器都是空的,只是防御
我想要做的是打印以下内容
我该怎么做,换句话说,如何从控制器访问这些属性?
答案 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']
<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'))