2012-07-12 2 views
0

이렇게하는 방법은 여러 가지가 있습니다.HMVC에서 모델 변경 이벤트를 여러보기로 보내는 방법은 무엇입니까?

  • 모델에서 컨트롤러 하나만 참조하십시오. 모델은이 컨트롤러에 이벤트를 보내고 다른 컨트롤러는 계층 구조를 통해이를 알게되고 뷰로 전달합니다.

  • 관심있는 컨트롤러를 모두 모델에있는 리스너 (모델에는 리스너 목록이 있음)로 설정합니다. 보기는 컨트롤러를 통해 변경 사항을 알게됩니다.

  • 관심있는 모든 뷰가 모델의 리스너가되도록하십시오. (보기는 변경 사항을 직접 알게됩니다)

    어떤 것이 적절하며 그 이유는 무엇입니까?

답변

1
  • 세 번째 옵션은 오래된 학교입니다. 뷰는 모델에 의해 알림을 받고 뷰는이를 처리하는 방법을 결정합니다. 괜찮아요.하지만 다른 옵션이 더 좋습니다.

  • 두 번째 옵션이 좋게 들립니다. 뷰는 컨트롤러에 의해 알림을받습니다 (뷰를 업데이트하고 모델을 업데이트하는 데 다른 컨트롤러가 있는지 확인하십시오). 따라서 컨트롤러는 이벤트를 뷰에 전달하기 전에 이벤트를 수정할 수 있습니다. 컨트롤러는 뷰의 데이터를 사용자 정의 할 수 있습니다. 보기가 이것을해서는 안되며, 작업은 무언가를 보여줄뿐입니다 (옵션 3에서는보기가이를 수행해야합니다).

  • 첫 번째 옵션은 계층 구조가있는 옵션 2의 작은 기능입니다. 이벤트 전달을 필터링하기 위해 복잡한 시나리오에서 더 나을 수도 있습니다. 그러나 정상적으로 이것은 오버 헤드를 날려 버릴 것입니다. 그래서 읽기가 더 어렵습니다.

옵션 2를 선택합니다. 그것은 단순한 코드의 가장 좋은 거래이고 복잡한 행동을위한 옵션입니다.

+0

답변 해 주셔서 감사합니다. 모델에서보기로 메시지를 보내려면 한 세트의 컨트롤러가 있어야하고 뷰에서 모델로 메시지를 보내려면 다른 컨트롤러 세트가 있어야한다고 생각하는 이유는 무엇입니까 (두 번째 요점)? –

+0

이 서로 다른 작업을하기 때문에 예 : 버튼은 이벤트를 생성하고 modelChangeController에 보냅니다.이 컨트롤러는 모델을 변경하기 위해 이벤트를 편집 할 수 있습니다. 모델 변경 및 변경 사항을 디스플레이 컨트롤러에 보내면이 컨트롤러는 그의 디스플레이에 맞는 이벤트를 변경할 수 있습니다. 디스플레이 (lable)에 변경 사항이 표시됩니다. 컨트롤러는 동일한 Object 일 수 있지만 두 개의 인터페이스를 구현해야합니다. 모델을 변경하기 위해 이벤트를 암송합니다. 하나는 디플레이 이벤트를 암송하여 디스플레이에 전송하는 것입니다. – Simulant

관련 문제