2014-06-13 3 views
1

Ember의 경우 템플릿이 표준 {{outlet}}에 렌더링 된 외부 컨트롤러가있는 응용 프로그램이 있습니다.Ember.JS - 내부 컨트롤러에서 외부 컨트롤러로 메시지 보내기

그러나이 템플릿에는 명명 된 콘센트 {{outlet details}}가 포함되어 있으며 해당 컨트롤러의 동작 중 하나는 해당 "details"콘센트를 렌더링하는 transitionToRoute()를 수행하며이 중첩 된 핸들러를 처리하는 내부 컨트롤러가 있습니다 주형.

내가해야 할 일은 내부 템플릿/컨트롤러에 작업을 실행하여 외부 컨트롤러에서 작업을 트리거하는 것입니다. Ember가 "콘센트"장벽을 깰 수없는 것 같습니다. 이벤트는 콘센트 내에서만 발생하며 상위 콘센트에서는 발생하지 않습니다.

상황은 나는 시도했다 :

  1. 시도 this.send()와 this.sendAction().
  2. 외부 컨트롤러를 내부 컨트롤러 (필요 : "main", 기본 : Ember.computed.alias ("controllers.main"))에 삽입하려고 시도하면 "정의되지 않은 함수가 아닙니다"오류가 발생합니다.
  3. 중첩 템플릿의 {{action}} 태그를 사용하고 상위 컨트롤러에있는 작업을 보내면 "아무 것도 '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 –

관련 문제