2014-06-13 66 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 –