12

我在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"}}

这给了我一个SearchControllerIndexController.

在里面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')它和以前一样工作。仔细阅读了最近在 ember 源中的提交以找到它...

谢谢你们的建议!

4

3 回答 3

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');
于 2013-09-02T11:03:15.650 回答
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

于 2013-12-24T21:21:32.337 回答
0

我认为 Ember 并没有改变它的行为。我创建了一个JSBin,在那里我成功地获得了控制器。

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

看法:

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

模板:

{{render foo}}

第一个日志语句显示了一个关联的控制器。你能看出我的代码和你的代码在概念上有什么区别吗?

于 2013-09-02T10:30:58.717 回答