我在模板中使用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仔细阅读...
感谢您的建议!
答案 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}}
第一个日志语句显示了一个关联的控制器。你能看到我和你的代码之间存在任何概念上的差异吗?