添加项目

问题描述:

注入部分我有杜松子酒库中的问题。我不明白如何将其纳入项目。该项目是非常简单的。(我把它理解杜松子酒,但还是不明白这一点。这个项目应该用杜松子酒库)添加项目

我们有一个按钮,复选框第一页。如果复选框的值为true,我们可以按下我们的按钮,这允许在第二页上添加新按钮。你们能帮我完成这个例子吗?我添加一个包含RootView,IRootView和RootPresenter的根包。 RootView必须包含Page1和Page2。我应该在RootPresenter中添加什么?哪个小部件应该在RootView中包含这两个页面?我将如何将Page1和Page2注入RootView?

谁能帮我用什么建议吗?更好,如果你能帮助一些代码,这将帮助我很多理解杜松子酒。对于第1页第1页

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

    public interface IPage1Presenter{} 
} 

主持人

Project structure

接口

@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; 
    } 
} 

几乎同样的事情第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页相同的结构,但它们是空的。我不知道代码应该包含它们。

任何人都可以用杜松子酒+的经验mvp4g帮助我吗?

UPDT: 我想自己做这一点,但还是有一个错误( 我做了什么:在

public interface IRootView extends IsWidget{ 
    interface IRootPresenter{} 
} 

我做RooView用UiBinder的

<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和Page 2(我怎么想象) 但是,当我试图注入他们 - 我有一个错误与类型

RootPresenter

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

     } 
    } 

首先,你应该使用最新版本的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 for answer。我的项目中的哪一类是提供者? – Andrew

+0

你想注射哪一类? –

+0

我们可以在这里讨论它:https://gitter.im/mvp4g/mvp4g –