emberjs,每个错误的控制器

时间:2013-01-29 17:28:46

标签: ember.js

如果我有这样的模板:

<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响应,定时器和类似的东西中更新控制器模型

2 个答案:

答案 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(如果没有更多显示的实现,很难说出来。)

通常,您不会直接创建控制器,而是允许路由器创建控制器,这反过来将帮助您根据需要控制上下文。指南中有一些很好的例子:

http://emberjs.com/guides/routing/rendering-a-template/