Gwt 为什么我不能更新我的导航栏(PermanentSlot)?

Gwt 为什么我不能更新我的导航栏(PermanentSlot)?,gwt,gwtp,gwt-platform,Gwt,Gwtp,Gwt Platform,简短摘要: 我尝试在地点更改事件后更新导航栏。为此,我创建了一个GWTPTest*.java,我试图在槽导航栏中呈现它。然而,这是行不通的。为了看我是否做错了什么,我只是在我的槽中渲染了自己,而AdminToolMainContent槽工作得非常好。问题是为什么我可以在一个插槽中渲染TestView,而不能在另一个插槽中渲染。GWTP没有给我任何关于我在这里做错了什么的线索,我在文档中找不到任何有助于我解决问题的东西 我确信问题一定是我这边的误解,或者是我正在做的一些非常愚蠢的事情,但我就是看不

简短摘要:

我尝试在地点更改事件后更新导航栏。为此,我创建了一个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
    a
    widget
    。请再读一遍这篇文章:也许你遗漏了什么。尝试
    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>