mvc패턴을 이용하게되다보면 서로다른 컨트롤러사이에 함수호출을 발생해야하는 상황이 발생하게됩니다. 보통 설계를 잘 하면 하나의 뷰와 하나의 컨트롤러가 1:1 매칭되어 운영되지만, 불가피하게도 다른 컨트롤러의 함수를 사용하게 될 일도 적지않게 발생됩니다. 이런 문제를 해결하는 방법은 상속을 사용하거나 다른 컨트롤러의 함수를 호출하므로써 간단히 해결볼 수 있습니다.
컨트롤러간의 모듈호출방법에는 크게 두가지가 있는데 하나는 dispatch하는것이고 다른 하나는 컨트롤러 객체를 얻어와서 내부 함수를 호출하는 것입니다. 이 둘의 차이는 url이 바뀌는 정도의 차이를 보여주는데 사실 앱 운영상 큰 차이는 없습니다.
dispatch를 통한 다른 컨트롤러 모듈호출
this.getApplication().dispatch({
});
key : value식으로 나열된 오브젝트를 디스패치시키는데 내부에 controller과 action key는 고정이며 그 이후로 나오는 key:value는 object 나 그 이상의 파라미터로 함수에 전달됩니다.
controller 부분은 해당 함수를 호출할 컨트롤러의 클래스명을 적습니다.
action 부분은 호출할 함수를 적습니다.
key 부분은 전달할 파라미터를 적습니다. 여기서 꼭 key가 아니더라도 value나 test 등의 사용자정의 key를 적어 파라미터로 전달시킬 수 있습니다.
컨트롤러 객체를 이용한 함수호출
this.getApplication().getController('{이름}.controller.{클래스명}').컨트롤러 내부 모듈명(param , ..[param..])
app.js 내부에 선언된 컨트롤러 객체를 가져오는 메소드를 이용하여 java의 체인형 메소드호출방식을 통해 컨트롤러 내부의 함수를 호출하게 합니다.
getController() 메소드는 클래스명을 주면 해당 클래스의 레퍼런스를 리턴하고 해당 레퍼런스 내에 정의된 함수를 호출하는 간단한 구조입니다.
두 방법중 간단한것은 후좌가 되겠고 흔히들 많이 사용하는 방식입니다. 2.0 beta1 시절부터 beta4까지 후좌함수를 지원하지 않았지만 2.0 사용버전이 나오면서 사용가능해졌습니다.