【问题标题】:Ember.js - Propagate event up the controller/router chainEmber.js - 在控制器/路由器链上传播事件
【发布时间】:2013-07-19 16:28:51
【问题描述】:

在 Ember.js 中,未在控制器中处理的事件沿路由器链向上传播到应用程序路由(有关详细信息,请参阅 http://emberjs.com/guides/views/handling-events/)。

有没有办法在控制器中定义一个事件处理程序,允许事件继续传播到路由器?

App.SampleController = Ember.ObjectController.extend({
  myEvent: function(obj) {
    this.set('aVariable', true);
  }
});

App.ApplicationRoute = Ember.Route.extend({
  events: {
    myEvent: function(obj) {
      this.transitionTo('something');
    }
  }
});

有没有办法让 CarsController 中的 myEvent 处理程序设置其内部状态变量,同时将事件沿链向上踢到应用程序路由?我知道这一点:

App.__container__.lookup('router:main').send('myEvent', obj);

但它使用 Ember 内部结构。我希望有一种更标准的方法来做到这一点。

【问题讨论】:

    标签: javascript events controller ember.js router


    【解决方案1】:

    实现这一目标的一种方法是:

    App.SampleController = Ember.ObjectController.extend({
      needs: 'application',
      myEvent: function(obj) {
        this.set('aVariable', true);
    
        this.get('controllers.application').send('myEvent');
      }
    });
    

    工作demo。

    希望对你有帮助。

    【讨论】:

    • 不起作用(尝试使用 Ember.js 1.0.0-rc.6)。我想知道是否也可能是这样,所以我尝试返回 true 和 false,但都没有成功。
    • @kleinsch adde 还有一个演示 jsbin:jsbin.com/oduhom/3/edit 将事件发送到应用程序控制器应该可以工作
    • @kleinsch 删除了弃用,现在使用需求 API 是获得对另一个控制器的依赖的正确方法,对不起所有的大惊小怪
    • 太棒了! controllerFor 已被弃用,因此您可能应该这样做 - jsbin.com/ozecoj/1/edit 。更新答案中的代码,我会接受!
    • 感谢您的快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2014-04-20
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多