여기 내 코드 구조가 있습니다. 다른 사람에게서 본 것으로 이해하려고합니다. 나는 그것의 클로저 스타일을 믿고 플러그인 스타일이 아닌가? 어쩌면 누군가가 폐쇄 스타일이라면 나를 위해 이것을 분명히 할 수있을 것입니다.jquery에서 이벤트 트리거
종류의 플러그인 스타일. 다음은 몇 가지 일반적인 질문입니다.
- 변수 NP가 전역 이름 공간에 올바르게 있습니까? 클로저와 내부 공개 메서드에 대한 참조로 을 사용했습니다.
- 메서드를 사용하기 전에 NP (네임 스페이스 임)를 사용하면 클로저 외부에서 해당 메서드를 참조 할 수 있습니다.
- NP를 null로 설정하면 가비지 콜렉션이 파괴되어 모든 변수를 포함하여 NP 내부의 모든 것의 이 허용됩니다.
여기는 더 큰 질문이므로 직접 설명하겠습니다. 내부 메소드에서 이벤트를 트리거 할 때 actionMethod() 다른 js 파일에서부터 해당 이벤트를받을 수 있기를 원합니다. 예를 들어 home.js
home.js
$(function(){
NP.bind("CHANGED", event_handler);
function event_handler(evt, data){
// do something....
}
$('#button').click(function(){
// call my public method in my NP plugin
NP.PublicMethod();
});
});
폐쇄 (스타일)
var NP = function(namespace){
var innerVariable = "the outside scope can't here me";
finction innerMethod(){
//does some inner functionality to the closure
}
namespace.PublicMethod = function(){
// does some calling of inner function.
// user can access this method from the myplugin directly.
// example: NP.PublicMethod();
}
function actionMethod(){
// trigger an event so others outside this closure can react
namespace.trigger("CHANGED");
}
}(NP || {});
누군가는 트리거에 대한 더 큰 질문을 처음 3 질문에 대답 할 수하십시오 이벤트. 미리 감사드립니다
업데이트 : ShankarSangoli는 DOM 요소에서 이벤트를 트리거로의 예를 만든
뭔가. 여기에있는 문제는 내 가까이에있는 닫기 단추 역할을하는 dom 요소가 있지만 home.js에 대한 참조 또는 참조가 없기 때문입니다. 따라서 NP 객체 수준에서 청취 할 수있는 방법이 필요합니다. 테스트로서 나는 아래의 코드를 시도해 보았다. 이유는 모르겠지만 DOM 요소가 아닌 대부분의 언어에서 가장 일반적인 객체에서 이벤트를 실행할 수 있습니다. 그리고이 경우 NP는 실제로 객체이거나 객체를 생각하는 데 미친 것입니다.
폐쇄 개체
function actionMethod(){
// trigger an event so others outside this closure can react
$(namespace).trigger("CHANGED");
}
home.js
$(TWCCP).bind("CLOSED_POPUP", onClosePopup);
지금 나는 이것에 대해 매우 혼란 스러워요. 이게 지금 어떻게 가능합니까 ???
감사합니다 ShankarSangoli 그래서 NP 개체 자체에서 해고 된 모든 이벤트를들을 수 있습니다. 닫기 버튼이 NP 객체 클로저에있을 것이고, 나는 그것이 일어 났을 때 CHANGED 이벤트를 발생시킬 수 있기를 원합니다. 그런 다음 내 집에서. js이 이벤트를 수신하고 내 event_handler() 메소드로 작업 할 수 있기를 원합니다. 제 생각에는 이벤트는 객체 자체가 아니라 DOM 요소에서만 해고 될 수 있습니까? – Chapsterj
@Chapsterj - 내 수정 된 답변을 확인하십시오. – ShankarSangoli
편집 된 답변도 확인하십시오. bindToChangedEvent가 로컬이므로 위의 코드가 작동하지 않습니다. namespace.bindToChangedEvent = function()을 사용하여 호출해야합니다. 또한 이것은 제가 요구하는 것이 아닙니다. 나는 해고 된 사건을 경청하고 돔 요소를 반대하는 방법이 필요하다. home.js는 이벤트를 발생시키는 돔 요소에 대해 전혀 모릅니다. – Chapsterj