Tôi đang triển khai mẫu mô-đun và muốn biết cách tốt nhất/ưa thích để xác định và đăng ký trình xử lý sự kiện/trình xử lý sự kiện. Các công trình sau đây, nhưng có lẽ có một/cách đơn giản hơn ...Sự kiện và mô hình mẫu mô-đun Javascript
var MODULE = function() {
// private
var _field1;
var _field2;
function localFunc(p) {
alert('localFunc');
}
// public
return {
// properties
prop1: _field1,
// events
myEvent1Handler: {},
myEvent1: function() {myEvent1Handler();},
myEvent2Handler: {},
myEvent2: function() {myEvent2Handler();},
addListener: function (event,func) {
if (event == "myEvent1")
myEvent1Handler = func;
if (event == "myEvent2")
myEvent2Handler = func;
},
// public methods
method1: function (p) {
alert('method1 says:' + p);
MODULE.myEvent1();
},
method2: function (p) {
alert('method2 doing stuff');
localFunc(p);
MODULE.myEvent2();
}
};
}();
// register for events
MODULE.addListener("myEvent1",function(){alert('fired1');});
MODULE.addListener("myEvent2",function(){alert('fired2');});
// use module (only event1 should fire!)
MODULE.method1("hello");
Hãy thử nó ra:
Có vẻ như rất nhiều công việc để có myEventx, myEventHandlerx, và addListener ?
Khi bạn gọi 'addListener()', không phải là tạo 'myEvent1Handler' hoặc' myEvent2Handler' dưới dạng biến _global_ tham chiếu tham số 'func' được truyền vào? Nó sẽ không được thiết lập các thuộc tính của cùng một tên đã được định nghĩa trong đối tượng của bạn trừ khi bạn nói 'this.myEvent1Handler = ...' - và sau đó 'this.myEvent1Handler()' trong hàm 'myEvent1' của bạn. (Hoặc 'MODULE.myEvent1Handler' giống như cách bạn có' MODULE.myEvent1() 'trong' phương thức1'.) – nnnnnn
Bạn đang cố giải quyết vấn đề gì? Điều này có vẻ như rất nhiều chi phí mà không thực sự làm bất cứ điều gì, nhưng làm cho một giàn giáo. Có lẽ nếu chúng tôi biết những gì bạn đang thực sự cố gắng hoàn thành, chúng tôi có thể giúp bạn tìm ra cách tốt nhất để làm điều đó. – jfriend00
Cảm ơn ... Tôi muốn sự kiện trong MODULE, để người dùng MODULE có thể móc nối vào các sự kiện. Các phương thức MODULE sẽ có các yêu cầu async (sử dụng jquery) vì vậy tôi muốn sử dụng các sự kiện để chỉ ra khi một yêu cầu async đã hoàn thành. – ZimSystem