Events 一个视图中的余烬事件是否更新另一个视图?

Events 一个视图中的余烬事件是否更新另一个视图?,events,view,controller,ember.js,Events,View,Controller,Ember.js,我有一个小摘录从我的余烬应用程序在这里。我的页面包含多个视图,每个视图包含不同的数据,每个视图都有自己的控制器 我想要一个搜索字段(在索引视图中)进入一个视图,该视图应与stationList控制器“对话”,以更新stationList视图的内容。这不管用。我得到一个错误:TypeError:this.get(…)。搜索不是一个函数 日志输出我要求它使用的控制器的名称:App.StationListController 我在StationList视图中添加了第二个搜索表单。这个很好用。这次的日志

我有一个小摘录从我的余烬应用程序在这里。我的页面包含多个视图,每个视图包含不同的数据,每个视图都有自己的控制器

我想要一个搜索字段(在索引视图中)进入一个视图,该视图应与stationList控制器“对话”,以更新stationList视图的内容。这不管用。我得到一个错误:TypeError:this.get(…)。搜索不是一个函数

日志输出我要求它使用的控制器的名称:App.StationListController

我在StationList视图中添加了第二个搜索表单。这个很好用。这次的日志记录输出StationListController对象的转储。因此,我猜测另一个搜索表单,尽管我的代码(在SearchFormView中):controllerBinding:'App.StationListController',没有正确设置控制器

App.IndexRoute = Ember.Route.extend({
    events: {
      search: function(term) {
        controller = this.controllerFor('station_list')
        controller.search(term);
      }
    }
});
所以我想我的问题是为什么不呢

如何将一个视图中表单字段的更改路由到另一个视图控制器上的函数

这是我的密码:

<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>

小提琴:

我认为
控制器绑定
的东西是从旧版本开始的,我认为它不再有效了

您可以使用
StationSearchField
中的
get('controller')
上的
controller

    this.get('controller').controllerFor('station_list').search(searchTerm)

但是
控制器已弃用,可能会被删除。取决于您在控制器上使用的应用程序结构

App.IndexRoute = Ember.Route.extend({
    events: {
      search: function(term) {
        controller = this.controllerFor('station_list')
        controller.search(term);
      }
    }
});
我使用的另一种方法是从视图发送自定义事件,然后路由将其发送到相应的控制器

App.IndexRoute = Ember.Route.extend({
    events: {
      search: function(term) {
        controller = this.controllerFor('station_list')
        controller.search(term);
      }
    }
});
并像这样从视图中发送搜索事件

    this.get('controller').send('search', searchTerm);
这种方法的优点是,您可以从多个地方调度同一事件,并且它将以相同的方式得到处理


这是最新版本。

我已将您的代码带到我的完整应用程序中,它运行良好。我有点担心controllerFor会贬值,因为你也在通风处理器中使用它。你知道现在做这件事的“正确”方法是什么吗?为什么是“station_list”而不是“StationList”?
controllerFor
只在有利于
需求的控制器上被弃用,路线上的控制器可以使用,而且不太可能被弃用,因为这是从routes.Context/routes访问其他控制器的标准方式,我认为这是一种惯例。StationList也可以,ember在内部做了很多这种转换。啊!好啊所以在那里使用控制器是安全的:-)