如果我有这样的模板:
<script type="text/x-handlebars" data-template-name="listbeer">
{{#each controller}}
<li>{{aname}}</li>
{{/each}}
</script>
然后什么都不会显示出来。另一方面,如果我这样做:
<script type="text/x-handlebars" data-template-name="listbeer">
{{#each DHApp.beerlistController}}
<li>{{aname}}</li>
{{/each}}
</script>
它有效,我从显示的控制器内容中获取列表。为什么是这样?我在前一种情况下看到了什么控制器。请注意,我已将它们绑定在视图中,所以我想:
DHApp.ListbeerView = Ember.View.extend({
templateName: 'listbeer',
});
DHApp.listbeerView = DHApp.ListbeerView.create({
controller: DHApp.listbeerController,
contentBinding: 'controller.content'
});
所以我希望看到同样的结果。请注意,控制器是一个数组,如上所述,如果我在每个循环中指定控制器,它就很好了
更新: 如果我做
{{controller}} {{DHApp.listbeerController}}
然后我得到
<DHApp.ListbeerController:ember192> <DHApp.ListbeerController:ember149>
看起来我收到的是默认控制器而不是我实例化的控制器。
那么有没有办法将视图的控制器设置为我实例化的视图。或者一种在路径外获得自动实例化控制器的方法。 我想访问控制器,以便我可以在ajax响应,定时器和类似的东西中更新控制器模型
答案 0 :(得分:0)
如果您执行以下操作,事情会有所改善吗?因为您需要使用get和set,而不是直接访问控制器。
DHApp.ListbeerView = Ember.View.extend({
templateName: 'listbeer',
});
DHApp.listbeerView = DHApp.ListbeerView.create({
controllerBinding: 'DHApp.listbeerController',
contentBinding: 'controller.content'
});
此外,从代码的外观来看,您似乎正在使用旧版本的Ember(或者错误地实现新的Ember),因为如果它们是DHApp
变量,则无法再访问控制器由EmberJS自动实例化,但instead dealt with in the router with this.controllerFor
。
答案 1 :(得分:0)
这很可能是一个背景问题。默认情况下,控制器将是其呈现的模板的上下文。如果您执行以下操作:
<script type="text/x-handlebars" data-template-name="listbeer">
{{controller}}
{{#each controller}}
控制器很可能是ApplicationController(如果没有更多显示的实现,很难说出来。)
通常,您不会直接创建控制器,而是允许路由器创建控制器,这反过来将帮助您根据需要控制上下文。指南中有一些很好的例子: