Ember.JS - 从内部控制器向外部控制器发送消息

时间:2014-06-13 14:43:55

标签: ember.js

在Ember中,我有一个应用程序,我有一个外部控制器,其模板以标准{{outlet}}呈现。

但是,模板包含一个命名的插座{{outlet details}},该控制器的一个操作执行transitionToRoute(),它在“详细信息”插座内部呈现,并且有一个内部控制器处理该嵌套模板

我需要做的是对内部模板/控制器执行操作,触发外部控制器上的操作。似乎Ember无法打破“出口”障碍。事件只会在出口内冒泡而不是在父母的出口处。

我尝试过的事情:

  1. 尝试过this.send()和this.sendAction()。
  2. 尝试将外部控制器注入内部控制器(需要:“main”,main:Ember.computed.alias(“controllers.main”)) - 导致“未定义不是函数”错误。
  3. 使用嵌套模板中的{{action}}标记并发送父控制器上存在的操作 - 导致“没有处理动作'selectTab'。如果您确实处理了操作,则可能导致此错误通过从控制器中的动作处理程序返回true,导致操作冒泡“错误。
  4. 我正在尝试甚至可能吗?我知道我可以使用jQuery来模拟这个,但我宁愿不必这样做,我更喜欢用“ember方式”(如果有的话)。

1 个答案:

答案 0 :(得分:2)

2号作品

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return ['red', 'yellow', 'blue'];
  },
  renderTemplate: function(){
    this.render();
    var fooCont = this.controllerFor('foo');
    this.render('foo',{
      into:'application',
      outlet:'foo',
      controller:fooCont
    });
  }
});

App.ApplicationController = Em.Controller.extend({
  actions:{
    hello: function(val){
      alert(val);
    }
  }
});

App.FooController = Em.Controller.extend({
  needs:'application',
  application: Em.computed.alias('controllers.application'),
  actions:{
    sendToApp: function(){
      this.get('application').send('hello', 'world');
    }
  }
});

http://emberjs.jsbin.com/qatepibu/1/edit