【问题标题】:How do I bind a controller to the view when the controller is create by Ember.js当控制器由 Ember.js 创建时,如何将控制器绑定到视图
【发布时间】:2013-04-16 21:20:17
【问题描述】:

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

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

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

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

感谢您的帮助!

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    从视图中您可以访问控制器

    this.controller
    

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

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

    然后使用:

    this.controller.mappingIndex
    

    【讨论】:

    • 好吧,视图没有控制器。它没有一个如 TextAreaView。但是,我不知道 Ember 是否会创建这样的控制器。
    • @Karsten 视图默认绑定到底层控制器。你是对的,它无论如何都会在引擎盖下创建控制器,所以你不妨自己创建它。
    【解决方案2】:

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

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

    【讨论】:

    • 不是那个。我需要先绑定一个不同的控制器。
    • 我为您更新了答案以使用控制器中的操作。
    • 好的,我应该尝试绑定 Ember.js 创建的实例吗?
    • 我不这么认为。通过使用需求:你可以访问它,这基本上就像绑定。
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2016-01-03
    • 2015-04-19
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多