2014-06-13 68 views
1

在Ember中,我有一个应用程序,我有一个外部控制器,模板以标准{{outlet}}呈现。Ember.JS - 从内部控制器发送消息到外部控制器

但是,该模板包含一个命名的出口{{outlet details}},并且该控制器的其中一个动作会执行transitionToRoute(),该出口位于该“details”出口内部,并且有一个内部控制器处理该嵌套模板。

我需要做的是对内部模板/控制器触发外部控制器上的操作。看来Ember不能打破“出路”的障碍。事件只会在商店内泡出来,而不会在商店里出现。

事情我已经尝试:

  1. 尝试this.send()和this.sendAction()。
  2. 尝试将外部控制器注入内部控制器(需要:“main”,main:Ember.computed.alias(“controllers.main”)) - 导致“undefined不是函数”错误。
  3. 使用嵌套模板中的{{action}}标记并发送父控制器上存在的操作 - 将导致“Nothing处理操作'selectTab'。如果处理了该操作,则可能导致此错误通过从控制器中的操作处理程序返回true,导致操作冒泡“错误。

我试过甚至有可能吗?我知道我可以使用jQuery来模拟这个,但我宁愿不必这样做,我更喜欢用“烬路”(如果有的话)。

回答

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

+0

Kingpin2k ......你力强的史诗! :) <3 –