Gwt 为什么我不能更新我的导航栏(PermanentSlot)?
简短摘要: 我尝试在地点更改事件后更新导航栏。为此,我创建了一个GWTPGwt 为什么我不能更新我的导航栏(PermanentSlot)?,gwt,gwtp,gwt-platform,Gwt,Gwtp,Gwt Platform,简短摘要: 我尝试在地点更改事件后更新导航栏。为此,我创建了一个GWTPTest*.java,我试图在槽导航栏中呈现它。然而,这是行不通的。为了看我是否做错了什么,我只是在我的槽中渲染了自己,而AdminToolMainContent槽工作得非常好。问题是为什么我可以在一个插槽中渲染TestView,而不能在另一个插槽中渲染。GWTP没有给我任何关于我在这里做错了什么的线索,我在文档中找不到任何有助于我解决问题的东西 我确信问题一定是我这边的误解,或者是我正在做的一些非常愚蠢的事情,但我就是看不
Test*.java
,我试图在槽导航栏中呈现它。然而,这是行不通的。为了看我是否做错了什么,我只是在我的槽中渲染了自己,而AdminToolMainContent
槽工作得非常好。问题是为什么我可以在一个插槽中渲染TestView
,而不能在另一个插槽中渲染。GWTP没有给我任何关于我在这里做错了什么的线索,我在文档中找不到任何有助于我解决问题的东西
我确信问题一定是我这边的误解,或者是我正在做的一些非常愚蠢的事情,但我就是看不出这不起作用的原因
我这里有一个“根”演示者:
AdminToolPresenter.java
公共类AdminToolPresenter扩展了Presenter您是否尝试将每个名称插槽
替换为单个插槽
?我不确定您是否可以更新PernamentSlot
您是否尝试将MenuPresenter
类中的类扩展中的PresenterWidget
替换为Presenter
MenuView
是一个小部件,没有位置,所以您似乎没有在任何地方添加此视图,所以它本身就不会显示。试着把一些静态的内容放到这个视图中,看看它是否甚至会显示自己
在主视图中尝试加载项构造函数widget.add(new MenuView())代码>。其中小部件被初始化(使用java或uibinder)视图元素
要显示常规的演示者
(这是一个地方),您必须为其设置一个url(例如:localhost:8080/myApp | localhost:8080/myApp#MenuPresenter)
要显示演示者Widget,您必须在某处调用它 根据文件:
NestedSlot:与SingleSlot相同,但只能接受具有
代理(无演示者Widget)
如果您尝试在那里放置一个错误的演示者Widget
-,请尝试:
将NestedSlot
替换为Slot
或SingleSlot
(接受PresenterWidget
)
或者更改MenuPresenter
以扩展常规的Presenter
,而不是PresenterWidget
尝试这样做并给我反馈。您应该尝试清理并安装整个应用程序,然后重新启动SuperDevMode和服务器。我已经重新创建了描述的功能。它起作用了。我以这篇文章为基础
布局示例。希望这会有所帮助
package pl.korbeldaniel.cms.client.place.app;
public class AppModule extends AbstractPresenterModule {
@Override
protected void configure() {
install(new UiModule());
bindPresenter(AppPresenter.class, AppPresenter.MyView.class, AppView.class, AppPresenter.MyProxy.class);
bindPresenter(HomePresenter.class, HomePresenter.MyView.class, HomeView.class, HomePresenter.MyProxy.class);
bindPresenter(ErrorPresenter.class, ErrorPresenter.MyView.class,
bindPresenter(TesttPresenter.class, TesttPresenter.MyView.class, TesttView.class, TesttPresenter.MyProxy.class);
}
}
包pl.korbeldaniel.cms.client.place.app;
公共类AppPresenter扩展TabContainerPresenter实现AppUIHandler、CurrentUserChangedHandler、AsyncCallStartHandler、AsyncCallFailHandler、AsyncCallSucceedHandler{
@ProxyStandard
公共接口MyProxy扩展了代理{}
公共接口MyView扩展了TabView,HasUiHandlers{}
public static final NestedSlot SLOT_NavBar=new NestedSlot();
私人最终测试中心测试中心;
@注入
AppPresenter(EventBus EventBus、MyView视图、MyProxy代理、TesttPresenter TesttPresenter){
超级(事件总线、视图、代理、插槽选项卡内容、插槽请求选项卡、插槽更改选项卡、RevealType.Root);
this.testtPresenter=testtPresenter;
getView().setUiHandlers(此);
}
@凌驾
受保护的void onBind(){
super.onBind();
setInSlot(插槽导航栏、测试重置中心);
}
}
包pl.korbeldaniel.cms.client.place.app;
公共类AppView扩展ViewWithUiHandlers实现AppPresenter.MyView{
公共接口绑定器扩展UiBinder{}
@UiField MaterialRow导航栏面板;
@注入
AppView(活页夹uiBinder){
initWidget(uiBinder.createAndBindUi(this));
bindSlot(AppPresenter.SLOT_导航栏,导航栏面板);
}
}
你好!我刚刚尝试用SingleSlot
替换PemanentSlot
,但结果是一样的。是的,MenuView
不是一个地方,但它显示正确。我有一个侧导航和一个导航栏,可以正确绘制-唯一不起作用的是导航栏没有被更新。菜单*.java
不是问题所在。它被添加到AdminToolPresenter#onBind
(见上文)。除了导航栏上的一件事外,一切都正常工作:/如何绑定PresenterWidget
?你能发布所有Test
*相关的完整文件吗?我已经添加了TestView
-你需要.ui.xml
和模块吗?没有什么比这更令人兴奋的了。。如果我在SLOT\u AdminToolMainContent
中渲染它,那么整个Test*.java
工作正常。因此,这不可能是问题。我认为一切都可能是问题:D我将尝试重新创建您的情况,以便我需要尽可能多的信息/代码。但我有TestPresenter extensed Presenter
,而不是TestPresenter extensed PresenterWidget
。我不明白。。除了<代码>插槽
或单插槽
是通用的。这意味着我需要一个“base”TestBasePresenter
,它“就在那里”,没有任何附加功能。我不认为这样做有什么意义——我觉得这样做不对。除了。。它没有意义,因为如果我在SLOT\u AdminToolMainContent
中绘制它,它会工作,这是一个NestedSlot
像SLOT\u NavBar
一样,我知道两者都是NestedSlot
,它对一方有效,对另一方无效,但我认为这不是你的问题所在。我还认为您应该使用breadcrumps
awidget
。请再读一遍这篇文章:也许你遗漏了什么。尝试
package pl.korbeldaniel.cms.client.place.app;
public class AppPresenter extends TabContainerPresenter<AppPresenter.MyView, AppPresenter.MyProxy> implements AppUiHandlers, CurrentUserChangedHandler, AsyncCallStartHandler, AsyncCallFailHandler, AsyncCallSucceedHandler {
@ProxyStandard
public interface MyProxy extends Proxy<AppPresenter> {}
public interface MyView extends TabView, HasUiHandlers<AppUiHandlers> {}
public static final NestedSlot SLOT_NavBar = new NestedSlot();
private final TesttPresenter testtPresenter;
@Inject
AppPresenter(EventBus eventBus, MyView view, MyProxy proxy, TesttPresenter testtPresenter) {
super(eventBus, view, proxy, SLOT_TAB_CONTENT, SLOT_REQUEST_TABS, SLOT_CHANGE_TAB, RevealType.Root);
this.testtPresenter = testtPresenter;
getView().setUiHandlers(this);
}
@Override
protected void onBind() {
super.onBind();
setInSlot(SLOT_NavBar, testtPresenter);
}
}
package pl.korbeldaniel.cms.client.place.app;
public class AppView extends ViewWithUiHandlers<AppUiHandlers> implements AppPresenter.MyView {
public interface Binder extends UiBinder<Widget, AppView> {}
@UiField MaterialRow navBarPanel;
@Inject
AppView(Binder uiBinder) {
initWidget(uiBinder.createAndBindUi(this));
bindSlot(AppPresenter.SLOT_NavBar, navBarPanel);
}
}
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' xmlns:m="urn:import:gwt.material.design.client.ui"
<m:MaterialPanel>
<m:MaterialRow ui:field="navBarPanel" />
</m:MaterialPanel>
</ui:UiBinder>
package pl.korbeldaniel.cms.client.playground.test.testt;
import pl.korbeldaniel.cms.client.place.app.AppPresenter;
public class TesttPresenter extends Presenter<TesttPresenter.MyView, TesttPresenter.MyProxy> {
public interface MyView extends View {}
@ProxyStandard
public interface MyProxy extends Proxy<TesttPresenter> {}
@Inject
public TesttPresenter(EventBus eventBus, MyView view, MyProxy proxy) {
super(eventBus, view, proxy, AppPresenter.SLOT_NavBar);
}
}
package pl.korbeldaniel.cms.client.playground.test.testt;
import pl.korbeldaniel.cms.client.place.app.AppPresenter;
public class TesttView extends ViewImpl implements TesttPresenter.MyView {
public interface Binder extends UiBinder<Widget, TesttView> {}
@UiField
SimplePanel main;
@Inject
public TesttView(Binder uiBinder) {
initWidget(uiBinder.createAndBindUi(this));
main.add(new Label("____________________________________________________________________________________________________________________>TEST "));
Window.alert("TESTT");
this.bindSlot(AppPresenter.SLOT_NavBar, this.main);
}
}
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:SimplePanel ui:field="main"></g:SimplePanel>
</ui:UiBinder>