이벤트 버블 링은 일반적으로 어떻게 작동하며 이벤트 전파와 동의어입니까? 이해하지 못했습니다. 잘 전파. 첫 번째

나는 이벤트 중심 (서브) 시스템에서 이벤트 디스패치의 일반적인 작업과 원칙에 대해 머리를 감싸려고합니다.

Javascript, Flash (Actionscript 2 및 3)와 같은 경우에 꽤 많이 사용했지만 한 번에 PHP로 간단한 이벤트 발송 시스템을 만들었지 만 이벤트 버블 링 및 / 또는 실제로 이해하지 못했습니다. 잘 전파.

첫 번째 질문 :
이벤트가 이벤트 전파와 동의어입니까?

두 번째 질문 :
이벤트가 “버블 링”할 때 이것이 객체의 계층 구조로 “이동”한다는 것을 이해하는 것이 맞습니까?

세번째로 가장 중요한 질문 :
질문 2에 대한 나의 이해가 정확하다면; 이것이 객체의 계층 구조를 어떻게 일반적으로 구현 하는가?
그것은 일반적으로 부모 개체 “재발송”에 동일한 이벤트 있다는 뜻 부모 (때까지 루트 개체에 도달)? 그리고 만약 그렇다면; 계층 구조의 모든 객체가 이러한 이벤트에 대해 자녀의 말을 들어야합니까? 아니면 이벤트 버블 링에 대한 이해에서 부모 객체가 자식 객체 이벤트의 리스너로 자신을 등록 할 필요가없는 중요한 원칙이 누락 되었습니까?

간단한 의사 코드를 사용하여 이러한 기본 원칙을 설명 할 수 있다면 감사 할 것입니다.



답변

첫 번째 질문 : 이벤트가 이벤트 전파와 동의어입니까?

버블 링은 이벤트 전파의 한 형태이지만 동의어로 사용할 수 없습니다. 전파는 이벤트를 전달하는 일반적인 용어입니다. 버블 링은 이벤트 전파의 특정 전략입니다.

두 번째 질문 : 이벤트가 “거품”일 때 이것이 개체의 계층 구조로 “이동”한다는 것을 이해하는 것이 맞습니까?

예. 버블 링tunneling 과 달리 계층 구조를 올라가는 것을 의미합니다. 즉, 최상위 요소에서 아래로 내려가거나 라우팅 됩니다. 즉, 이벤트를 수신 할 다음 객체가 무엇이든 될 수 있습니다.

세번째로 가장 중요한 질문 : 질문 2에 대한 나의 이해가 정확하다면; 이것이 객체의 계층 구조를 어떻게 일반적으로 구현 하는가?

아주 쉽습니다. 시각적 계층 구조에서 컨트롤은 부모 / 그들의 최상위 비주얼에 대한 참조를 갖거나 어딘가에서 얻을 수 있습니다. 따라서 이벤트를 캡처하면 부모에게 이벤트에 대해 알리기 만하면 부모에게 이벤트 등을 알립니다.

의사 코드는 모든 UI 컨트롤에서 다음과 같습니다.

OnEvent(SomeEvent event)
{
   CallHandlersForEvent(event);
   if(HasParent && event.ContinueBubbling == true)
   {
       Parent.OnEvent(event);
   }
}

블루 베리 필드 (Blueberryfields)와 마찬가지로 다음 행사를받는 직접적인 부모 일 필요는 없다. 다음과 같이 구현할 수도 있습니다.

OnEvent(SomeEvent event)
{
    CallHandlersForEvent(event);
    NextControl = VisualTree.GetVisualParent(this);
    if(NextControl != null && event.ContinueBubbling == true)
    {
       NextControl.OnEvent(event);
    }
}

답변

첫 번째 답변 :

이벤트 버블 링은 이벤트 전파를 안내하는 특정 알고리즘입니다.

두 번째 답변 :

아니요, 버블 링은 계층 구조와 반드시 관련 될 필요는 없습니다. 내부 또는 다른 곳에서 객체가 표현되는 방식은 알고리즘이 제대로 작동하는 데 중요하지 않습니다. 이상적으로 이벤트가 거품이 발생하면 화면의 가장 안쪽에 보이는 요소에서 화면의 가장 바깥쪽에있는 요소까지 바깥쪽으로 확장됩니다.

세 번째 답변 :

구현 세부 사항은 각 내부 (브라우저)의 내부 구현 방식에 따라 크게 달라질 수 있습니다. bubbling알고리즘은 화면의 영상에 따라 달라집니다. 캡슐화 요소가 내부 요소보다 상속 계층 구조에서 높으면 예를 들어 언어의 표준 상속 메커니즘을 사용하여 버블 링을 구현할 수 있습니다. 그러나 반드시 사실은 아닙니다. 내부 구조와 화면의 가시성을 모두 해석하고 내부 조직을 무시하면서 알고리즘에 따라 이벤트를 전파 할 수있는 특수 메커니즘이있을 수 있습니다.