当Ember.js创建控制器时,如何将控制器绑定到视图

时间:2013-04-16 21:20:18

标签: ember.js

此问题与How to display the “content” of an ObjectController?略有关联 但是,在提供的解决方案和所有其他示例中,我可以发现控制器始终是显式创建的。关于Ember.js的好处是路线主要处理所有事情。所以我不想创建控制器,但想将它绑定到视图:

{{view App.myview controllerBinding="App.applicationController"}}

您可以在this fiddle中看到完整的示例。这个例子并不是很好,因为Ember通常会将子视图的控制器设置为其父视图。

最后我需要知道,我如何从视图中访问由Ember创建的控制器。

感谢您的帮助!

更新 我提供了错误的小提琴,或者它没有保存我的更改。以下是正确版本的链接:http://jsfiddle.net/ncaZz/1/

我应该在模板的第9行提供什么?

2 个答案:

答案 0 :(得分:0)

你真的不需要绑定它。您可以通过这样调用来从视图中访问控制器。

this.get('controller');

更新的答案:

你真的不应该在你的视图中有你的点击事件。您的操作应该在您的控制器或路由器中。

您的模板应该成为

<span style="background-color: green" {{action doStuff}}>
    Click
</span>

你应该有一个应该有这个

的控制器
App.MyController = Em.Controller.extend({
    needs: ['application'],
    doStuff: function(){
       this.get('controllers.application').foo();
    }
});

此外,MyView和MyController应该大写,因为当从非实例的ember扩展这些项目时,需要大小写。该视图应该只在didInsertElement中具有处理特殊事物的东西,例如任何类型的jquery动画或初始化日期选择器。但是,“余烬方式”是在路由器或控制器中采取行动。

答案 1 :(得分:0)

从视图中,您可以使用

访问控制器
this.controller

如果您需要除视图控制器之外的其他控制器,则可以使用viewcontroller中的需求:

App.DatasetEditController = Ember.ObjectController.extend({
  needs: ['mappingIndex']
});

然后使用:

this.controller.mappingIndex