2013-09-10 1 views
2

나는 여러 개의 서브 모듈이있는 마리오네트 모듈을 가지고 있습니다. 상위 모듈에는 이벤트를 트리거하기 위해 하위 모듈에서 사용하려는 자체 이벤트 수집기가 있습니다. 애플리케이션의 이벤트 애그리 게이터를 사용할 수는 있지만 이러한 이벤트는 전체 애플리케이션이 아닌 상위 모듈과 하위 애플리케이션에만 적용됩니다.부모 모듈에 액세스하는 가장 좋은 방법은 서브 모듈에서 마리오 네트로

나는과 같이 응용 프로그램의 이벤트 애그리 게이터 (aggregator)에서 이벤트를 네임 스페이스 수 :

App.module("Parent.Child", function(self, App, ...) { 

    // somewhere in the child 
    App.vent.trigger("Parent:something"); 
}); 

하지만 난 정말이 아니라 그 길을 갈 것입니다. 부모 모듈과 그 자식을위한 단일 이벤트 애그리 게이터를 사용하는 것이 더 깨끗하다고 ​​생각합니다. 부모님과 응용 프로그램에 하나의 인터페이스가 있고 부모에게 자식 인터페이스가있는 것이 좋지만 ... 아마도이 생각에 잘못 되었나요?

나는 또한과 같이 부모를 응용 프로그램 개체에서 모듈의 이벤트 애그리 게이터 (aggregator)를 얻을 수 :

App.module("Parent.Child", function(self, App, ...) { 

    // somewhere in the child... 
    App.Parent.vent.trigger("something"); 
}); 

하지만 오히려 하나 그렇게 할 것입니다. 나는 그것이 아이 모듈과 애플 리케이션을 너무 단단히 묶을 것이라고 생각한다.

다른 아이디어 또는 옵션은 무엇입니까? 어쩌면 이것들은 좋은 생각이며, 나는 그 이점을 이해하지 못합니다.

+0

이벤트를 사용하는 대신 하위 모듈에서 App.Parent.something()을 방금 호출했습니다. – galki

답변

8

마리오넷은 submodules 속성을 통해 app/module/submodule 체인을 드릴 다운하는 기능을 제공하지만 Module의 부모를 쉽게 식별 할 수는 없습니다. 우리는 이것이 도움이되었을 수있는 몇 번 만났지 만 문제가되지 않은 상황에 결코 빠지지 않았습니다. 그것은 당신이 당신이 parent 속성을 만들 수 _addModuleDefinition 기능을 포장 시도 할 수 있습니다 귀하의 코드베이스 청소기를 만들 수있을 거라 생각하는 경우 말했다 :

var func = Marionette.Module._addModuleDefinition; 
Marionette.Module._addModuleDefinition = function(parentModule, module) { 
    module.parent = parentModule; 
    func.apply(this, arguments); 
}; 

이렇게하면 같은 일을 할 수있는 능력을 제공 할

App.module("Parent.Child", function(self, App, ...) { 
    self.parent.trigger('whatever'); // (vent isn't required anymore) 
}); 
-1

하위 모듈로 상위 모듈을 대체 할 수 있습니다. 이렇게하면 하위 응용 프로그램 이벤트를 사용할 수 있습니다.

관련 문제