2012-04-12 58 views
5

Looking for giải pháp thanh lịch cho một vấn đề chung:Cà phê kịch bản - bảo bối cảnh lớp học và bối cảnh sự kiện

Tôi có một lớp học mà đăng ký vào vài sự kiện, tôi muốn xử lý là một phương pháp dụ bên trong lớp học của tôi, nhưng cũng muốn nhận bối cảnh sự kiện (phần tử sự kiện được kích hoạt cho trường hợp này).

Tôi đang sử dụng cú pháp dòng chất béo cho định nghĩa phương thức nhưng không có cách nào để có được bối cảnh sự kiện. Để được cụ thể, tôi đang sử dụng raphael js và khi đăng ký trên phần tử, đối tượng sự kiện không chứa phần tử, chỉ có phần tử dom nên không có ngữ cảnh sự kiện, tôi sẽ phải tìm kiếm phần tử bằng id raphael bên trong bài báo và tôi không thích nó

Thực tiễn tốt nhất trong trường hợp này là gì? Tôi hiện đang tạo một đối tượng ngữ cảnh mới trước mỗi lần tôi đăng ký sự kiện, ngữ cảnh chứa tham chiếu cá thể và tham chiếu phần tử.

Trả lời

5

Nếu tôi hiểu chính xác bạn, bạn muốn giữ tham chiếu đến cả ngữ cảnh bị ràng buộc và không bị ràng buộc trong hàm xử lý. Bạn có thể đạt được điều này bằng cách thực hiện điều gì đó tương tự như mũi tên chất béo:

class TheListenerObject 
    constructor: -> 
    context = @ # some people may call it `self` 
    @theHandlerMethod =() -> 
     referenceToTheListenerObjectInstance = context 
     referenceToTheUnboundContext = @ 
+0

Đây là giải pháp phổ biến ... nó sẽ hoạt động nhưng có một số ma thuật bên trong. ngữ cảnh sẽ được bao bọc bằng phương thức xử lý trong một đối tượng ẩn danh mới cho mỗi lần mã này chạy. (như bản chất của js) Tôi đang tìm kiếm một cách sạch hơn nếu tồn tại. như tôi đã nói, tôi đã tạo bối cảnh bên trong trình xử lý để tránh vấn đề này. –

+1

@ChenKinnrot thì bạn nên cung cấp một số ví dụ về mã. Rất khó để hiểu những gì bạn muốn chính xác và những gì bạn đã đạt được. Một điều tôi có thể nói chắc chắn là nếu bạn muốn hàm tham chiếu một số đối tượng từ phạm vi bên ngoài, bạn chắc chắn sẽ phải bọc nó trong một đóng cửa ở một số giai đoạn và sau đó có chức năng được redeclared cho mỗi ngữ cảnh mới. Không có phép thuật ở đây, chỉ cần javascript. –

+0

không thể tốt hơn, cảm ơn. –

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