2011-07-31 31 views
6

Chỉ mới bắt đầu với Dojo. Tôi muốn chuyển một vài tham số tùy chỉnh tới trình xử lý sự kiện. Trong jQuery, bạn có thể làm điều đó như thế này:Dojo: Cách chuyển thông số tùy chỉnh cho trình xử lý sự kiện

$('#button').click({ 
    customData: 'foo' 
}, handlerFunction); 

customData có thể được truy cập từ handlerFunction như thế này:

function handlerFunction(event) { 
    console.log(event.data.customData); 
} 

Tôi đang di chuyển một chút mã jQuery qua Dojo. Làm thế nào tôi có thể vượt qua những tham số để xử lý sự kiện Dojo?

Trả lời

12

Vâng, generaly, đóng cửa cho phép bạn để vượt qua thông số "ẩn" tới chức năng:

function make_event_handler(customData){ 
    return function(evt){ 
     //customData can be used here 
     //just like any other normal variable 
     console.log(customData); 
    } 
} 

Vì vậy, khi kết nối với một sự kiện trong võ đường:

dojo.connect(node, 'onclick', make_event_handler(17)); 

Một khả năng mà tôi thích rất nhiều đang sử dụng dojo.partial/dojo.hitch để tạo các bao đóng cho bạn.

function event_handler(customData, evt){ 
    /// 
} 

dojo.connect(node, 'onclick', dojo.partial(event_handler, 17)) 

Lưu ý rằng tất cả các những yêu cầu xử lý sự kiện của bạn được tạo ra với đi qua các tham số phụ (s) trong tâm trí. Tôi không biết nếu bạn có thể làm một bản dịch trực tiếp hơn của mã JQuery vì điều đó sẽ yêu cầu thêm sự xoa bóp của biến evt và tôi không nghĩ dojo làm điều đó.

+1

Aha, 'dojo.partial' chỉ là những gì tôi đang tìm kiếm. Cảm ơn! – Jonah

1

Ngoài ra:

this.connect(other, "onClick", function(e) { 
    /* other is accesible here still */ 
}); 

hay:

this.connect(other, "onClick", dojo.hitch(this, "handler", other); 

và xử lý của nó sự kiện:

this.handler = function(other, evt){...} 
Các vấn đề liên quan