在项目中添加注入部分
Adding inject section in project
我对 gin 库有疑问。我不明白如何将它包含在项目中。项目很简单。(为了了解gin而做的,还是不懂,这个项目应该用到了gin库)
我们的第一页带有按钮和复选框。如果复选框的值 - true 我们可以按下我们的按钮,这允许在第二页上添加新按钮。你们能帮我完成这个例子吗?我添加了一个包含 RootView、IRootView 和 RootPresenter 的根包。 RootView 必须包含 Page1 和 Page2。我应该在 RootPresenter 中添加什么?哪个小部件应包含 RootView 中的两个页面?我如何将 Page1 和 Page2 注入 RootView ?
谁能帮我提点建议?如果您能帮助编写一些代码,那就更好了,这将对我理解杜松子酒有很大帮助。
Page1的界面
public interface IPage1View extends IsWidget {
public Button getAddButton();
public CheckBox getCheckBox();
public interface IPage1Presenter{}
}
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;
}
}
与第 2 页几乎相同。为了节省空间,我没有 post 它。
事件总线
@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();
}
并且根包元素与 Page1 具有相同的结构,但它们是空的。我不知道什么代码应该包含它们。
任何有使用 gin + mvp4g 经验的人都可以帮助我吗?
更新:
我正在尝试自己做这个,但仍然存在错误。(
我做了什么:
public interface IRootView extends IsWidget{
interface IRootPresenter{}
}
我用 UIBinder 制作了 RooView。
<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>
这些面板应该包含我们的 page1 和 page2(我怎么想的)。
但是当我尝试注入它们时 - 我遇到了类型错误。
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(){
}
}
首先,您应该使用最新版本的mvp4g (1.5.0)。您可以在此处找到最新版本:https://github.com/mvp4g/mvp4g/releases
视图和服务由 mvp4g 注入。因此,不需要为此使用 GIN。
如果你需要注入其他东西,只需为此创建一个 Provider class:
public class MyClassProvider
implements Provider<MyClass> {
static MyClass myClass = new MyClass();
@Override
public MyClass get() {
return MyClass;
}
}
接下来你需要一个 class 来设置 GIN:
public class MyApplicationGinModule
extends AbstractGinModule {
@Override
protected void configure() {
bind(MyClass.class).toProvider(MyClassProvider.class)
.in(Singleton.class);
}
}
一旦你有了这个class,你就可以轻松地将它添加到事件总线中:
@Events(startPresenter = Page1Presenter.class,
ginModules = MyApplicationGinModule.class)
public interface AppEventBus extends EventBus {
...
}
在这里您可以找到更多信息:https://github.com/mvp4g/mvp4g/wiki/08.-GIN-Integration
我对 gin 库有疑问。我不明白如何将它包含在项目中。项目很简单。(为了了解gin而做的,还是不懂,这个项目应该用到了gin库)
我们的第一页带有按钮和复选框。如果复选框的值 - true 我们可以按下我们的按钮,这允许在第二页上添加新按钮。你们能帮我完成这个例子吗?我添加了一个包含 RootView、IRootView 和 RootPresenter 的根包。 RootView 必须包含 Page1 和 Page2。我应该在 RootPresenter 中添加什么?哪个小部件应包含 RootView 中的两个页面?我如何将 Page1 和 Page2 注入 RootView ?
谁能帮我提点建议?如果您能帮助编写一些代码,那就更好了,这将对我理解杜松子酒有很大帮助。
Page1的界面
public interface IPage1View extends IsWidget {
public Button getAddButton();
public CheckBox getCheckBox();
public interface IPage1Presenter{}
}
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;
}
}
与第 2 页几乎相同。为了节省空间,我没有 post 它。
事件总线
@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();
}
并且根包元素与 Page1 具有相同的结构,但它们是空的。我不知道什么代码应该包含它们。
任何有使用 gin + mvp4g 经验的人都可以帮助我吗?
更新: 我正在尝试自己做这个,但仍然存在错误。( 我做了什么:
public interface IRootView extends IsWidget{
interface IRootPresenter{}
}
我用 UIBinder 制作了 RooView。
<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>
这些面板应该包含我们的 page1 和 page2(我怎么想的)。 但是当我尝试注入它们时 - 我遇到了类型错误。
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(){
}
}
首先,您应该使用最新版本的mvp4g (1.5.0)。您可以在此处找到最新版本:https://github.com/mvp4g/mvp4g/releases
视图和服务由 mvp4g 注入。因此,不需要为此使用 GIN。
如果你需要注入其他东西,只需为此创建一个 Provider class:
public class MyClassProvider
implements Provider<MyClass> {
static MyClass myClass = new MyClass();
@Override
public MyClass get() {
return MyClass;
}
}
接下来你需要一个 class 来设置 GIN:
public class MyApplicationGinModule
extends AbstractGinModule {
@Override
protected void configure() {
bind(MyClass.class).toProvider(MyClassProvider.class)
.in(Singleton.class);
}
}
一旦你有了这个class,你就可以轻松地将它添加到事件总线中:
@Events(startPresenter = Page1Presenter.class,
ginModules = MyApplicationGinModule.class)
public interface AppEventBus extends EventBus {
...
}
在这里您可以找到更多信息:https://github.com/mvp4g/mvp4g/wiki/08.-GIN-Integration