2012-03-29 4 views
1

현재 모든 모듈을 연결하는 중재자를 사용 중이며 서로 통신 할 수 있습니다. 모든 모듈은 중재자를 경유하여 청취중인 모든 것에 메시지를 보내야합니다. RequireJS에 대한 책을 읽었는데 모듈 간의 통신을 원활하게하는 방법에 대한 문서를 찾지 못했습니다.RequireJS - 모듈 간 통신

나는 신호를 보았다. 그러나 내가 올바르게 이해하면 신호가 중재자를 통해 물건을 돌리고있을 때 그다지 유용하지 않다. 나는 내가 할 수있는 것이 무엇인지 궁금해했다. 어떤 종류의 콜백 패턴을 사용하는 것에 매우 열중하고 있지만 중재자의 간단한 조회 테이블보다 정교한 것은 없습니다.

여기 내가 찾은 신호 구현의 : http://ryanflorence.com/publisher.js/

이 문제에 대한 표준화 된 접근 방식 있는가 또는 모든 것을 의존 구동해야합니다 https://github.com/millermedeiros/js-signals

여기 내가 찾은 뭔가 다른입니까?

답변

3

중앙 집중식 이벤트 관리자를 사용하는 것은 상당히 일반적이며 매우 확장 가능한 접근 방식입니다. 어떤 문제가 있다면, 당신이 이벤트 모델을 가지고 있는지에 대해 질문하는 것이 어렵습니다.

파일 1 :

require(['publisher','module1'],function(Publisher,Module1) { 
    var module = new Module1(); 
    Publisher.subscribe('globaleventname', module.handleGlobalEvent, module); 
}); 

파일 2 (게시자 이용)은 다음과 같이 일반적인 것은 여기의 주요 장점은 느슨한 결합은

require(['publisher','module2'],function(Publisher,Module2) { 
    var module = new Module2(); 
    module.someMethod = function() { 
     // method code 
     // when method needs module1 to run its handler 
     Publisher.publish('globaleventname', 'arguments', 'to', 'eventhandlers'); 
    }; 
}); 

; 객체가 다른 객체의 메소드를 알고 있기보다는 객체가 이벤트를 발생시킬 수 있고 다른 객체는 특정 응용 프로그램 상태를 처리하는 방법을 알고 있습니다. 이벤트를 처리하는 오브젝트가 존재하지 않으면 오류가 발생하지 않습니다.

이 방법으로 어떤 문제가 있습니까? https://github.com/naugtur/overlord.js

그것은 보통의 발행인 또는 중재자보다 조금 더 많은 일을 할 수 있습니다 : 여기

3

당신이 시도 할 수 있습니다 뭔가. 모든 모듈의 모든 메소드에 액세스하기위한 공통 API를 작성할 수 있습니다.

이것은 내 자신의 도구이기 때문에 일종의 뻔뻔한 플러그입니다.하지만 질문과 상당히 관련이 있습니다.

require.js에 대한 지원이 추가되었습니다.

+0

매우 멋지다 !! 나는 기저귀를 지켜 볼거야. – backdesk