2011-12-20 4 views
0

MVP, clientFactory, activities, places 및 uiBinder를 사용하는 GWT 2.4 앱이 있습니다. 나는 자신의 ui.xml 파일을 가지고 독립 객체로 만든 복합 위젯을 가지고있다. 이 클래스를 참조하여 기본 viewImpl.ui.xml 파일에 삽입합니다.GWT의 복합 위젯에 발표자를 설정하는 방법

복합 위젯은 백엔드에서 일부 데이터를 수신하므로 표에 표시 될 수 있도록 활동에 다시 가져와야합니다. 활동에 도달하기 위해 뷰와 연관된 발표자를 사용하고 있습니다. 보기 인터페이스에서 :

public interface NameView extends IsWidget 
{ 
    void setPresenter(Presenter presenter); 
...  

public interface Presenter{ 
      void goTo(Place place); 
      void setRowDataList(List<Data> rowData); 
     } 

내 활동에서 나는에로 View.Presenter을 구현 :

Activity extends AbstractActivity implements NameView.Presenter 

그래서 활동이 내 독립 위젯 내에서 필요로하는 발표자 여기에 코드입니다 활동의 시작 메소드에서 나는 사용한다 :

NameView nameView = clientFactory.getNameView();//NameView is just an example. 
nameView.setPresenter(this); ... 

발표자를 설정하고 그것을 인스턴스화하는 데 사용한다.

presenter.setRowDataList(rowData); 

하지만 위젯에서 인스턴스화 발표자를 참조하는 방법을 잘 모르겠어요 : 내 문제는 위젯에 나는이 필요하다?

실제로이 gwtUpload 위젯은 독립형입니다. 업로드 된 일부 데이터에 대해 서버 측 계산을 수행하고 이것이이 위젯에 반환됩니다.

위젯 데이터를 다시 Activity로 가져와 해당 데이터를 NameViewImpl 클래스로 다시 전달해야합니다.

발표자가 적절한 방법이라고 생각했지만 위젯이 뷰 또는 viewImpl에 연결되어 있지 않으므로 위젯에 대한 발표자를 얻는 방법이 필요합니다.

나는 진이 DI를 가지고 그것을 할 것인지 또는 다른 발표자를 만들 것인지를 알고 있습니다. GWT를 사용하여 GIN을 설정 한 적이 없습니다. 이 작업을 수행하는 올바른 방법에 대한 아이디어가 있습니까?

작업을 구현 :

나는 이것이 최선의 구현인지 아닌지 알아,하지만 토마스의 답변에 따라하지, 난에서 발표자 (활동)의 인스턴스 내 위젯을 설정 ViewImpl 클래스의 setPresenter() 메서드. 그것은 위젯이 다시 활동으로 돌아가는 통로 역할을합니다. 나는 그것이 토마스가 콜백 인터페이스로서 의도 한 것이라고 생각한다.

답변

1

이 유사한 위젯의 콜백 인터페이스를 (정의하는 것입니다 :

나는 당신이이 문제를 해결하기 위해 GIN 필요하다고 생각하지 않는다, 어떤 경우 여기 시작을위한 좋은 입문서 발표자 인터페이스에서 발표자 인터페이스 사용) 발표자 인터페이스가 일반적으로 위젯 특정 인터페이스를 확장하도록 만듭니다.
그러면 뷰에 연결된 setPresenter (또는 무엇이든간에)을 호출하면 표현자를 연결하기 위해 뷰가 즉시 동일한 값을 가진 위젯에서 setCallback을 호출합니다 (표현자가 콜백 인터페이스를 구현 함).

다른 디자인은 발표자 인터페이스의 메서드 뒤에 위젯 관련 콜백을 숨기는 것입니다. 뷰가 콜백을 구현하고 메서드를 구현하여 발표자의 동일한 메서드로 라우트되도록합니다.

여기 진, 여기 도움이되지 않습니다.

+0

답변 해 주셔서 감사합니다. –

1

당신이 옳다고 이해한다면, 당신은 한 세트의 액티비티, 발표자, UI (NameView)와이 세개로부터 분리 된 다른 객체를 가지고 있습니다. 분리 된 객체는 gwtUpload 위젯입니다.

발표자에게 알리는 한 가지 방법은 eventBus입니다. 나는 당신이 활동에 대한 참조를 가지고 있다고 확신한다. gwtUpload의 경우 '독립형'개체로 정확히 무엇을 의미하는지 모르겠 으면 eventBus에 도달하기 위해 다른 발표자와 어떤 종류의 연결이 있어야합니다.

gwtUpload 위젯은 서버 측 계산의 결과로 eventBus에 이벤트 (자체 발표자를 통해)를 실행합니다. 모델 개체 만 결과로 보내는 것이 좋습니다.활동은 이벤트에 대해 eventBus에 핸들러를 "등록"합니다. 핸들러에서 테이블 표시를 갱신하기 위해 뷰에 데이터를 보낼 수 있습니다. 우리는 비슷한 상황에서 무슨 짓을 http://code.google.com/p/google-gin/wiki/GinTutorial

관련 문제