Làm thế nào để bong bóng sự kiện thường hoạt động và nó đồng nghĩa với tuyên truyền sự kiện?


11

Tôi đang cố gắng xoay quanh các hoạt động chung và các nguyên tắc của việc gửi sự kiện trong các hệ thống theo hướng sự kiện (phụ).

Mặc dù tôi đã sử dụng nó trong một vài lần, ví dụ như Javascript, Flash (Bản mô tả 2 và 3) và thậm chí đã tự mình tạo ra một hệ thống gửi sự kiện đơn giản trong PHP, nhưng tôi chưa bao giờ thực sự hiểu về sự kiện bong bóng và / hoặc tuyên truyền mà tốt.

Câu hỏi đầu tiên:
Là sự kiện sủi bọt đồng nghĩa với tuyên truyền sự kiện?

Câu hỏi thứ hai:
Tôi có đúng theo cách hiểu của tôi rằng khi một sự kiện "bong bóng", điều này có nghĩa là nó được "di chuyển" lên thứ bậc của các đối tượng?

Câu hỏi thứ ba và quan trọng nhất:
Nếu sự hiểu biết của tôi trong câu hỏi 2 là chính xác; Làm thế nào điều này "di chuyển" lên hệ thống phân cấp của các đối tượng thường được thực hiện?
Có phải nó thường có nghĩa là đối tượng cha mẹ "bán lại" cùng một sự kiện với cha mẹ của nó (cho đến khi nó đến được đối tượng gốc)? Và nếu như vậy; Có phải tất cả các đối tượng trong hệ thống phân cấp cần lắng nghe con cái của chúng cho các sự kiện này, hay tôi đang thiếu một nguyên tắc quan trọng nào đó trong sự hiểu biết của tôi về sự kiện sủi bọt, trong đó không cần phải để đối tượng phụ huynh tự đăng ký chúng là người nghe các sự kiện đối tượng trẻ em?

Nếu bạn có thể minh họa các nguyên tắc cơ bản này bằng một số mã giả đơn giản, tôi sẽ rất biết ơn.


1
Một bài viết liên quan: Thứ tự sự kiện
Jonas

Câu trả lời:


7

Câu hỏi đầu tiên: Là sự kiện sủi bọt đồng nghĩa với tuyên truyền sự kiện?

Không. Bong bóng là một hình thức truyền bá sự kiện, nhưng nó không thể được sử dụng như một từ đồng nghĩa. Tuyên truyền là một thuật ngữ chung để vượt qua một sự kiện xung quanh. Bong bóng là một chiến lược cụ thể của tuyên truyền sự kiện.

Câu hỏi thứ hai: Tôi có đúng theo cách hiểu của tôi rằng khi một sự kiện "bong bóng", điều này có nghĩa là nó được "di chuyển" lên thứ bậc của các đối tượng?

Đúng. Bong bóng có nghĩa là nó đi lên cấu trúc phân cấp, trái ngược với đường hầm , có nghĩa là nó đi từ phần tử trên xuống hoặc định tuyến , có nghĩa là đối tượng tiếp theo nhận sự kiện có thể là bất cứ điều gì bạn chọn.

Câu hỏi thứ ba và quan trọng nhất: Nếu sự hiểu biết của tôi trong câu hỏi 2 là chính xác; Làm thế nào điều này "di chuyển" lên hệ thống phân cấp của các đối tượng thường được thực hiện?

Khá dễ dàng. Trong hệ thống phân cấp thị giác của bạn, các điều khiển có tham chiếu đến cha mẹ / hình ảnh cấp cao nhất của chúng hoặc có thể lấy nó ở đâu đó. Vì vậy, khi họ nắm bắt một sự kiện, họ chỉ cần thông báo cho cha mẹ của nó về nó, thông báo cho cha mẹ của nó về nó, v.v.

Mã giả giống như thế này đối với mọi điều khiển UI:

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

Giống như blueberryfields nói rằng nó không cần phải là phụ huynh trực tiếp nhận sự kiện tiếp theo. Bạn cũng có thể thực hiện như thế này:

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

+1 Mã giả có ý nghĩa với tôi, cảm ơn bạn! (Nhân tiện, phần còn lại của câu trả lời của bạn, nhân tiện.)
Decab Dabbler

@fireeyedboy: Bạn được chào đón =)
Falcon

1

Câu trả lời đầu tiên:

Sự kiện sủi bọt là một thuật toán cụ thể hướng dẫn việc truyền bá sự kiện.

Câu trả lời thứ hai:

Không, bong bóng không nhất thiết liên quan đến bất kỳ thứ bậc nào. Làm thế nào các đối tượng được biểu diễn bên trong hoặc ở nơi khác không thực sự quan trọng để thuật toán hoạt động đúng. Lý tưởng nhất là khi một sự kiện bong bóng, nó sẽ mở rộng ra từ phần tử nhìn thấy trong cùng trên màn hình, đến phần tử nhìn thấy ngoài cùng trên màn hình.

Câu trả lời thứ ba:

Các chi tiết triển khai có thể thay đổi rất nhiều tùy thuộc vào cách thức thực hiện của từng phần (trình duyệt). Các bubblingthuật toán phụ thuộc vào hình ảnh trên màn hình. Ví dụ, nếu một phần tử đóng gói cao hơn trong hệ thống phân cấp thừa kế so với một phần tử bên trong, thì sự sủi bọt có thể được thực hiện bằng cách sử dụng các cơ chế kế thừa tiêu chuẩn trong ngôn ngữ, ví dụ. Nhưng điều đó không nhất thiết đúng - bạn có thể có một cơ chế chuyên biệt có thể diễn giải cả cấu trúc bên trong và khả năng hiển thị của chúng trên màn hình và truyền bá các sự kiện theo thuật toán trong khi bỏ qua tổ chức bên trong.


1
Tại sao bạn nói: "sủi bọt không nhất thiết liên quan đến bất kỳ thứ bậc nào". Theo tôi đó là. Không có thứ bậc thì không có bong bóng. Phải có một số loại cây. Bạn có thể kể tên một ví dụ về bong bóng mà không có cấu trúc cây không? Ví dụ của bạn "từ phần lớn bên trong đến phần tử nhìn thấy ngoài cùng" chỉ là - một hệ thống phân cấp trực quan.
Falcon

1
Chắc chắn, bạn có thể giải thích nó như một hệ thống phân cấp nếu bạn thực sự muốn. Tôi thích nghĩ về nó như một biểu đồ kết hợp lỏng lẻo, bao gồm một số yếu tố trực quan và một số yếu tố không trực quan.
blueberryfields

2
Nhưng sau đó sự tương tự bong bóng thất bại. Bởi vì trong biểu đồ, sự kiện có thể được định tuyến ở bất cứ đâu trong khi bong bóng rõ ràng đi từ dưới lên trên.
Falcon

Tôi nghĩ bạn không thể gọi nó là bong bóng trong một biểu đồ tùy ý nữa. Nó phải được gọi là "định tuyến sự kiện" rồi imho.
Falcon

1
Tôi tin rằng Falcon làm cho một số điểm công bằng. Nghe có vẻ hợp lý khi nghĩ về bong bóng như một thứ gì đó di chuyển lên (một hệ thống phân cấp).
Dabbler Decent
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.