2012-05-02 33 views
6

Tôi đã kết nối một số sự kiện click cơ bản bằng cách sử dụng event maps của Meteor.Dừng tuyên truyền sự kiện trong Meteor

Làm cách nào để ngăn sự kiện tuyên truyền sau khi được xử lý?

docs Meteor của state rằng

Ngay bây giờ, xử lý sự kiện được dây lên với jQuery, và các đối tượng sự kiện bạn nhận được là một đối tượng sự kiện jQuery.

Tuy nhiên, không return false cũng không e.stopPropagation() có vẻ hoạt động.

+0

Tôi gặp rất nhiều rắc rối với điều này và đây là lý do tại sao tôi chuyển trở lại các sự kiện jQuery ngay bây giờ. Tôi nghĩ rằng nó có thể là một lỗi nhưng tôi không chắc chắn tôi không có thời gian để gỡ lỗi. Tôi sẽ đề nghị làm như vậy hoặc cố gắng gỡ lỗi. – jonathanKingston

+0

Yea phương pháp dự phòng của tôi là sử dụng trình xử lý sự kiện jQuery, và sau đó móc vào các bản đồ sự kiện sao băng w/'$ ('# foo'). Trigger ('bar')' từ bên trong các trình xử lý. – Emmett

Trả lời

7

Hiện tại, stopPropagation hoạt động trong một số trường hợp giới hạn. Để tuyên truyền dừng giữa hai trình xử lý, các trình xử lý phải được chỉ định trên các mẫu khác nhau và phải có một vùng chứa nút DOM xen kẽ giữa mẫu bên trong và bên ngoài. Bản sửa lỗi đang được phát triển ngay bây giờ và sẽ đi vào bản phát hành sắp tới.

Bạn có thể đăng một ý chính của mã để tôi có thể đảm bảo rằng trường hợp cụ thể của bạn sẽ được thêm vào không?

Như một giải pháp thay thế, bạn có thể thử e.stopImmediatePropagation(), được cung cấp bởi jQuery và nên giữ cho bất kỳ trình xử lý nào khác chạy.

+0

Cảm ơn thông tin. Trong mã của tôi, tôi có 'show'. Tôi muốn có thể xử lý một sự kiện nhấp chuột trên '# show' và sau đó ngăn không cho url href được theo sau. (Ngay bây giờ, '#' xuất hiện trong thanh url sau khi nhấp chuột được xử lý.) – Emmett

+0

@dgreensp - Điều này đã được đề cập trong tài liệu dưới dạng lỗi, tôi đã nghĩ rằng nó có thể đã được sửa khi nó đã bị xóa. Tôi đề nghị nó được thêm vào lại cho đến khi sửa chữa này được đưa ra. Đang mở về các lỗi mà cá nhân tôi cho là mang đến một môi trường đáng tin cậy hơn. – jonathanKingston

+1

Aha, bạn muốn 'e.preventDefault()'! @jonathanKingston, những lỗi này đã được sửa trong 0.3.5. – dgreensp

1

Tôi đã xem qua câu hỏi này trong khi tự nghiên cứu vấn đề này. Tài liệu cho Bản đồ sự kiện Blaze là here.

Đối với vấn đề này trong thiên thạch bạn cần cân nhắc 2 chức năng phụ thuộc vào những gì bạn muốn:

stopPropagation()

Ngăn chặn các sự kiện từ tuyên truyền (bọt) đến các yếu tố khác. Các trình xử lý sự kiện khác khớp với cùng phần tử vẫn được kích hoạt, trong bản đồ sự kiện này và các sự kiện khác.

stopImmediatePropagation()

Ngăn chặn tất cả các xử lý sự kiện bổ sung từ được chạy về sự kiện này, bao gồm bộ xử lý khác trong bản đồ này sự kiện, xử lý đạt bằng bọt, và xử lý trong các bản đồ sự kiện khác.

Điều tôi muốn là ngừng tạo bọt và ngừng truyền cho các trình xử lý sự kiện Meteor khác. Vì vậy, event.stopImmediatePropagation() đã làm các trick và nó không thực sự là một workaround như đã đề nghị ở trên.

Các vấn đề liên quan