我在这里有我的 Ember 应用程序的一小部分摘录。我的页面包含许多视图,每个视图都包含不同的数据,每个视图都有自己的控制器。
我想要一个搜索字段(在索引视图中)进入一个视图,该视图应该与 stationList 控制器“对话”以更新 stationList 视图的内容。这行不通。我收到一个错误:TypeError: this.get(...).search is not a function
日志记录输出我要求它使用的控制器的名称:App.StationListController
我在 StationList 视图中添加了第二个搜索表单。这个工作得很好。这次的日志记录输出了 StationListController 对象的转储。所以我猜测其他搜索表单,尽管我的代码(在 SearchFormView 中):controllerBinding:'App.StationListController',没有正确设置控制器。
所以我想我的问题是为什么不呢?
如何在一个视图中的表单字段上路由更改以在另一个视图的控制器上调用函数?
这是我的代码:
<script type="text/x-handlebars" data-template-name="application">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<div id="searchForm">search form view search:
{{#view App.SearchFormView}}
{{view App.StationSearchField}}
{{/view}}
</div>
<div id="stationList">{{render stationList}}</div>
</script>
<script type="text/x-handlebars" data-template-name="stationList">
station list view search: {{view App.StationSearchField}}
<ul>
<li>List</li>
<li>will</li>
<li>go</li>
<li>here</li>
</ul>
{{searchTerm}}
</script>
和
App = Ember.Application.create({})
App.SearchFormView = Ember.View.extend({
init : function()
{
console.log("SearchFormView init", this.get('controller'))
}
})
App.StationSearchField = Ember.TextField.extend({
keyUp: function(event) {
var searchTerm = this.value
console.log("value",searchTerm,this.get('controller'))
this.get('controller').search(searchTerm)
}
})
App.StationListController = Ember.ArrayController.extend({
content : [],
searchTerm : null,
search : function(term)
{
this.set("searchTerm",term)
console.log("searching",term)
}
});
小提琴:http: //jsfiddle.net/ianbale/8QbrK/14/