2014-09-09 5 views
1

여기에 index.html을의 작품이다. lvl1a에 대한FlightJs 이벤트 전파

function top() { 
    this.after('initialize', function() { 
     console.log('[DEBUG] Top initialized.'); 

     this.on('broadcastEvent', function (e, data) { 
      console.log("[DEBUG] Broadcast recived: " + data.message); 
     }); 
     this.trigger('broadcastEvent', { 
      message: "This is a broadcast message." 
     }); 
    }); 
} 

둘째 :

상위 요소의 하나

function lvl1a() { 
    this.after('initialize', function() { 
     console.log('[DEBUG] Lvl 1 a initialized.'); 

     this.on('broadcastEvent', function (e, data) { 
      console.log("[DEBUG] Broadcast recived: " + data.message); 
     }); 
    }); 
} 

내 출력은 다음과 같습니다

[DEBUG] Top initialized. 
[DEBUG] Broadcast recived: This is a broadcast message. 
[DEBUG] Lvl 1 a initialized. 

이벤트가 아이들에게 전파되지 않는 이유 노드? 어떻게해야합니까?

편집 : 나는 이러한 이벤트가 아래에서 위로 전파된다는 것을 알았습니다. 변경할 수 있습니까?

답변

2

Flight (실제로 jQuery)는 표준 DOM 이벤트 전파 스키마를 사용합니다. 이벤트는 하위에서 상위로 바블 링됩니다.

모든 자식으로부터 알림을 받으려면 문서 루트 요소 (<html>) 또는 <body>과 같은 일반적인 컨테이너 요소에 이벤트 처리기를 배치해야합니다.

function lvl1a() { 
    this.after('initialize', function() { 
     console.log('[DEBUG] Lvl 1 a initialized.'); 

     $(document.body).on('broadcastEvent', function (e, data) { 
      console.log("[DEBUG] Broadcast recived: " + data.message); 
     }); 
    }); 
} 
+0

당신의 응답을 주셔서 감사하십시오. 기본 전파 스키마를 버블 링에서 캡처로 변경하는 방법이 있습니까? 그래서 모든 아이들에게 메시지를 방송하는 것입니까? –

+1

이벤트 캡처는 이벤트 브로드 캐스트가 아닙니다. 어떤 컨테이너의 모든 요소에 대한 이벤트 핸들러를 호출하려면 다음과 같이 할 수 있습니다 : '$ (container) .find(). triggerHandler ("broadcastEvent");' 컨테이너의 자손 -'O (N)'연산. –