Ember 1.0.0 - 无法再从视图访问控制器?

时间:2013-09-02 10:19:06

标签: ember.js

我在模板中使用render帮助器,这会使搜索框具有预先输入。

基本上(为简洁起见,删除了代码):

script(type='text/x-handlebars', data-template-name='index')
    {{render search}}

script(type='text/x-handlebars', data-template-name='search')
    {{view App.TaggableInput valueBinding="searchText"}}

这使我与SearchController分开IndexController

App.TaggableInput内部我抓住searchController来检查keyUp事件:

App.TaggableInput = Ember.TextField.extend({
    keyUp: function(e){
        var controller = this.get('controller');
        // Do stuff with the controller
    }
});

在Ember RC7上,我可以按照您期望的this.get('controller').get('searchText')访问视图内的控制器。

然而,在Ember 1.0.0 this.get('controller')返回视图,无论我做什么,我都无法获得searchController

我在ember网站上找不到任何关于改变或我应该做什么的相关信息......现在我坚持使用RC7。

有什么想法吗?今天早上我花了几个小时才弄清楚它。感谢。

更新:已修复!

我为this.get('controller')换了this.get('targetObject'),它和以前一样。通过a recent commit in ember source仔细阅读...

感谢您的建议!

3 个答案:

答案 0 :(得分:5)

我想你的代码

App.TaggableInput = Ember.TextField.extend({
    keyUp: function(e){
        var controller = this.get('controller');
        // Do stuff with the controller
    }
});

这一行

 var controller = this.get('controller');

获取与您的(子视图)相关联的控制器

尝试使用此行来访问路径的控制器:

 var controller = this.get('parentView.controller');

答案 1 :(得分:3)

目前,{{render}}助手需要2个参数,第一个是上下文,第二个是模型。 我建议使用此方法并遵循模型控制器的命名约定,而不是显式设置控制器。

您可以在此处找到文档: http://emberjs.com/guides/templates/rendering-with-helpers/#toc_the-code-render-code-helper

此讨论中还跟踪了从视图中访问控制器: https://github.com/emberjs/ember.js/issues/1712#issuecomment-31183940

答案 2 :(得分:0)

我认为恩伯没有改变它的行为。我创建了一个JSBin,我设法成功地获得了控制器。

我所做的是创建一个简单的视图并通过{{render}}帮助器显示它:

查看:

App.FooView = Ember.TextField.extend({
  didInsertElement : function(){
    console.log(this.get("controller.constructor"));
    console.log(this.get("context.constructor"));
  }
});

<强>模板:

{{render foo}}

第一个日志语句显示了一个关联的控制器。你能看到我和你的代码之间存在任何概念上的差异吗?