2016-09-13 15 views
0

私はginライブラリに問題があります。私はそれをプロジェクトに組み込む方法を理解していません。プロジェクトは非常にシンプルです(私はジンを理解するために作ったが、まだそれを取得しないでください)このプロジェクトはジンライブラリを使用する必要がありますプロジェクトに注入セクションを追加する

私たちはボタンとチェックボックスで最初のページがあります。チェックボックスの値がtrueの場合、ボタンを押すことができます。これにより、2番目のページに新しいボタンを追加できます。あなたは私がこの例を完成するのを手助けすることができますか? RootView、IRootView、RootPresenterを含むルートパッケージを追加します。 RootViewにPage1とPage2が含まれていなければなりません。 RootPresenterに何を追加する必要がありますか?どのウィジェットがRootViewの両方のページを含むべきですか? Page1とPage2をRootViewに挿入する方法は?

誰でも助けてもらえますか?いくつかのコードを手伝っていただければ幸いです。

Project structure

Page1の

@Presenter(view = Page1View.class) 
public class Page1Presenter extends BasePresenter<IPage1View, AppEventBus> implements IPage1View.IPage1Presenter{ 
    @Override 
    public void bind() { 
     view.getCheckBox().setValue(true); 
     view.getAddButton().addClickHandler(new ClickHandler() { 
      @Override 
      public void onClick(ClickEvent clickEvent) { 
       eventBus.addNewButton(); 
      } 
     }); 
     view.getCheckBox().addValueChangeHandler(new ValueChangeHandler<Boolean>() { 
      @Override 
      public void onValueChange(ValueChangeEvent<Boolean> event) { 
       if(event.getValue()){ 
        eventBus.enableMOM(); 
       } 
       else { 
        eventBus.disableMOM(); 
       } 
      } 
     }); 
    } 

    public void onStart(){ 
     RootPanel.get("page1").add(view); 
    } 

    public void onEnableMOM(){ 
     view.getAddButton().setEnabled(true); 
    } 
    public void onDisabledMOM(){ 
     view.getAddButton().setEnabled(false); 
    }} 

Page1View

public class Page1View extends ReverseCompositeView<IPage1View.IPage1Presenter> implements IPage1View{ 

    private Button addButton; 
    private CheckBox checkBox; 

    Page1View(){ 
     SimplePanel mainPanel = new SimplePanel(); 
     DecoratorPanel backgroundPanel = new DecoratorPanel(); 
     addButton = new Button("Add new button"); 
     checkBox = new CheckBox("Enable adding new buttons"); 
     VerticalPanel content = new VerticalPanel(); 
     content.setSize("400px","400px"); 
     content.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); 
     content.add(addButton); 
     content.add(checkBox); 
     backgroundPanel.add(content); 
     mainPanel.add(backgroundPanel); 
    } 

    @Override 
    public Button getAddButton() { 
     return addButton; 
    } 

    @Override 
    public CheckBox getCheckBox() { 
     return checkBox; 
    } 
} 

ほぼ同じもののためのPage1

public interface IPage1View extends IsWidget { 
    public Button getAddButton(); 
    public CheckBox getCheckBox(); 

    public interface IPage1Presenter{} 
} 

プレゼンターのインターフェイスを持ちますページ2。私はそれを投稿しない場所を保存するために。

EventBus

@Events(startView = Page1.class) 
public interface AppEventBus extends EventBus { 

    @Start 
    @Event(handlers = {Page1Presenter.class, Page2Presenter.class, Page3Presenter.class, Page4Presenter.class}) 
    public void start(); 

    @Event(handlers = {Page1Presenter.class}, activate = Page2Presenter.class) 
    public void enableMOM(); 

    @Event(handlers = {Page1Presenter.class}, deactivate = Page2Presenter.class) 
    public void disableMOM(); 

    @Event(handlers = Page2Presenter.class) 
    public void addNewButton(); 

    @Event(handlers = Page2Presenter.class) 
    public void deleteSomeButton(Button killerButton); 

    @Event(handlers = Page3Presenter.class) 
    public void getData(); 

    @Event(handlers = Page4Presenter.class) 
    public void addNewPoint(); 
} 

、ルートパッケージ要素はページ1と同じ構造を持っているが、彼らは空にしてください。私はどのコードにそれらを含めるべきかを知らない。

gin + mvp4gの使用経験がある人は誰でも手伝ってもらえますか?

UPDT: 私は自分自身でこれをやろうとしているが、それでもそこにエラー( 私は何をしています:。。私はUiBinderサンプルメッセージでRooViewを作っ

public interface IRootView extends IsWidget{ 
    interface IRootPresenter{} 
} 

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
      xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
    <g:HTMLPanel> 
     <g:SimplePanel ui:field="page1"> 

     </g:SimplePanel> 
     <g:SimplePanel ui:field="page2"> 

     </g:SimplePanel> 
    </g:HTMLPanel> 
</ui:UiBinder> 

これらのパネル私はページ1とページ2を含むべきです(私は想像しています)。 しかし、私はそれらを注入しようとしています - タイプにエラーがあります。

public class RootView extends ReverseCompositeView<IRootView.IRootPresenter> 

    implements IRootView { 

     @UiField 
     SimplePanel page1, page2; 

     @Inject 
     public RootView(Page1View page1, Page2View page2){ 
      //how to add them ? 
     } 

     interface RootViewUiBinder extends UiBinder<Widget, RootView> { 
     } 

     private static RootViewUiBinder ourUiBinder = GWT.create(RootViewUiBinder.class); 

     public RootView() { 
      initWidget(ourUiBinder.createAndBindUi(this)); 
     } 
    } 

RootPresenter

@Presenter(view = RootView.class) 
    public class RootPresenter extends BasePresenter<IRootView, AppEventBus> implements IRootView.IRootPresenter{ 
     public void onStart(){ 

     } 
    } 

答えて

0

まず、あなたはmvp4gの最新バージョン(1.5.0)を使用する必要があります。ここに最新バージョンがあります:https://github.com/mvp4g/mvp4g/releases

ビューとサービスはmvp4gによって注入されます。ですから、GINを使う必要はありません。

あなたが何かを注入する必要がある場合は、ちょうどこのクラスのプロバイダを作成します。

public class MyClassProvider 
    implements Provider<MyClass> { 

    static MyClass myClass = new MyClass(); 

    @Override 
    public MyClass get() { 
    return MyClass; 
    } 
} 

次はGINセットアップクラス必要があります:あなたは、このクラスを持っていたら

public class MyApplicationGinModule 
    extends AbstractGinModule { 

    @Override 
    protected void configure() { 
    bind(MyClass.class).toProvider(MyClassProvider.class) 
         .in(Singleton.class); 
    } 
} 

を、イベントバスに簡単に追加することができます:

@Events(startPresenter = Page1Presenter.class, 
     ginModules = MyApplicationGinModule.class) 
public interface AppEventBus extends EventBus { 
    ... 
} 

ここでは、詳細情報:https://github.com/mvp4g/mvp4g/wiki/08.-GIN-Integration

+0

答えのためのThx。私のプロジェクトのどのクラスがプロバイダになるのですか? – Andrew

+0

どのクラスに注入しますか? –

+0

私たちはここでそれについて議論することもできます:https://gitter.im/mvp4g/mvp4g –

関連する問題