0

这个问题与如何显示 ObjectController 的“内容”略有关系? 但是,在提供的解决方案和所有其他示例中,我发现控制器始终是显式创建的。Ember.js 的好处在于 Route 几乎可以处理所有事情。所以我不想创建控制器,但想将它绑定到视图:

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

你可以在这个小提琴中看到完整的例子。这个例子不是很好,因为 Ember 通常将子视图的控制器设置为其父视图。

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

谢谢你的帮助!

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

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

4

2 回答 2

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 动画或初始化日期选择器。但是,“余烬方式”是在路由器或控制器中执行操作。

于 2013-04-16T23:20:00.920 回答
0

从视图中,您可以使用

this.controller

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

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

然后使用:

this.controller.mappingIndex
于 2013-04-17T09:46:39.963 回答