此问题与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行提供什么?
答案 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