Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何将EventHandler添加到使用MVP将Dynamicly添加到视图的小部件_Gwt_Handler_Mvp - Fatal编程技术网

Gwt 如何将EventHandler添加到使用MVP将Dynamicly添加到视图的小部件

Gwt 如何将EventHandler添加到使用MVP将Dynamicly添加到视图的小部件,gwt,handler,mvp,Gwt,Handler,Mvp,我有一个代表网站面包屑的视图,我通过如下设置面包屑来更新视图 public void setCrumb(ArrayList<Crumb> crumbs) { content.clear(); for (int i=0;i<crumbs.size()-1; i++){ Anchor anchor = new Anchor(crumbs.get(i).getText()) content.add(anc

我有一个代表网站面包屑的视图,我通过如下设置面包屑来更新视图

public void setCrumb(ArrayList<Crumb> crumbs) {
    content.clear();        
    for (int i=0;i<crumbs.size()-1; i++){   
        Anchor anchor = new Anchor(crumbs.get(i).getText()) 
            content.add(anchor);
        content.add(new InlineHTML("  >  "));
    }
    content.add(crumbs.get(crumbs.size()-1).getText());
}
public void setCrumb(ArrayList crumbs){
content.clear();

对于MVP环境中的(int i=0;i),应在视图中创建UI元素并捕获事件,然后视图应处理这些事件并调用演示者采取适当的操作,如:

public void setCrumb(ArrayList<Crumb> crumbs) {
    content.clear();        
    for (int i=0;i<crumbs.size()-1; i++){   
        Anchor anchor = new Anchor(crumbs.get(i).getText());
        anchor.addClickHandler(new ClickHandler(){
            @Override
            public void onClick(ClickEvent event) {
                presenter.doSomethingAboutAnchorClicks(...);
            }
        }); 
        content.add(anchor);
        content.add(new InlineHTML("  >  "));
    }
    content.add(crumbs.get(crumbs.size()-1).getText());
}

在MVP环境中,应在视图中创建UI元素和捕捉事件,然后视图应处理这些事件并调用演示者采取适当的操作,如:

public void setCrumb(ArrayList<Crumb> crumbs) {
    content.clear();        
    for (int i=0;i<crumbs.size()-1; i++){   
        Anchor anchor = new Anchor(crumbs.get(i).getText());
        anchor.addClickHandler(new ClickHandler(){
            @Override
            public void onClick(ClickEvent event) {
                presenter.doSomethingAboutAnchorClicks(...);
            }
        }); 
        content.add(anchor);
        content.add(new InlineHTML("  >  "));
    }
    content.add(crumbs.get(crumbs.size()-1).getText());
}

在这种情况下,演示者从显示中获取小部件并向其添加处理程序。但我想,将演示者传递到视图,然后调用处理事件的方法可能是多种多样的……特别是在这种情况下,小部件是动态创建的。@Moh我的用例与您在此处显示的面包屑是动态创建的情况完全相同创建,仅显示区域而不是网站面包屑。我将自己版本的代码附加到我的答案中,可能会对您有所帮助。正如您在我的代码中所注意到的,我使用地图对象来保持整洁,并确保所有内容只添加一次。因为我的面包屑可能会变得非常深入,这是必须的。在这一过程中,演示者获得了小部件但我想将演示者传递给视图,然后调用处理事件的方法可能是多种多样的…特别是在这种情况下,当小部件是动态创建的。@Moh我有一个与您在这里显示的完全相同的用例,其中面包屑是动态创建的,只显示区域网站面包屑广告。我将自己版本的代码附加到我的答案中,也许这会对你有所帮助。正如你在我的代码中所注意到的,我使用地图对象来保持事物的整洁,并确保所有内容只添加一次。因为我的面包屑可能会变得非常深,这是必须的。