저는 모듈 패턴을 구현 중이며 이벤트 리스너/핸들러를 정의하고 등록하는 최선의 방법을 알고 싶습니다. 작품에 따라,하지만 어쩌면 더 나은/간단한 방법이 ...자바 스크립트 모듈 패턴 이벤트 및 리스너
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");
그것을 밖으로 시도 :
는 myEventx, myEventHandlerx과의 addListener을 가지고 많은 일처럼 보인다 ?
'addListener()'를 호출하면 전달 된'func' 매개 변수를 참조하는 _global_ 변수로'myEvent1Handler' 또는'myEvent2Handler'가 생성되지 않습니까? 'myEvent1' 함수에서'this.myEvent1Handler = ...'- 그리고'this.myEvent1Handler()'를 제외하고는 이미 객체에 정의 된 동일한 이름의 속성을 설정하지 않을 것입니다. (또는'MODULE.myEvent1Handler'는'method1'에'MODULE.myEvent1()'이있는 것과 같습니다.) – nnnnnn
실제로 어떤 문제를 해결하려고합니까? 이것은 실제로 아무것도하지 않고 비계를 만드는 많은 오버 헤드처럼 보입니다. 아마도 우리가 실제로 성취하려는 것을 알고 있다면, 우리는 당신이 그것을하기위한 최선의 방법을 찾도록 도울 수 있습니다. – jfriend00
감사합니다 ... 나는 MODULE의 사용자가 이벤트에 연결할 수 있도록 MODULE에서 이벤트를 원합니다. MODULE 메서드는 비동기 요청 (jquery 사용)을 가지므로 이벤트를 사용하여 비동기 요청이 완료되었을 때 나타냅니다. – ZimSystem