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中编码addChangeHandler的最佳实践是什么?_Gwt - Fatal编程技术网

在Gwt中编码addChangeHandler的最佳实践是什么?

在Gwt中编码addChangeHandler的最佳实践是什么?,gwt,Gwt,在UiBinder中 @UiField ListBox testListBox; 在presenter中,我有一个方法getData(),它将数据放入testListBox public void getData(){ getView().getTestListBox().clear(); getView().getTestListBox().addItem("itm 1"); getView().getTestListBox().addItem

在UiBinder中

@UiField ListBox testListBox;
在presenter中,我有一个方法
getData()
,它将数据放入
testListBox

public void getData(){
        getView().getTestListBox().clear();
        getView().getTestListBox().addItem("itm 1");
        getView().getTestListBox().addItem("itm 2");
        getView().getTestListBox().addItem("itm 3");
        getView().getTestListBox().addChangeHandler(new ChangeHandler(){

            @Override
            public void onChange(ChangeEvent event) {
                // TODO Auto-generated method stub
                int ind=getView().getTestListBox().getSelectedIndex();
                System.out.println(getView().getTestListBox().getValue(ind));
            }

        });
}
现在,我还有一个按钮可以调用
getData()
。如果我单击该按钮1次,然后在
测试列表框中选择“itm 1”
一切正常,因为它将打印出来:

itm 1 itm 1 但是,如果我第二次单击该按钮并选择“itm 1”,则它会打印两次“itm 1”:

itm 1 itm 1 如果我第三次点击它,它会打印出三个“itm 1”

但是,如果我在将项目添加到列表框之前将
getView()


那么,在Gwt中编码addChangeHandler的最佳实践是什么呢?

重要的是,只需调用一次
addChangeHandler()。如果多次调用它(如在您的场景中),那么当值更改时(因此打印重复的值),将同时调用多个处理程序

在添加实际项目之前还是之后调用
addChangeHandler()
,其实并不重要。我通常在创建ListBox实例后立即添加更改处理程序,这是我见过的最常见的操作


由于您使用的是UIBinder,因此会自动为您创建ListBox实例。在这种情况下,在UI容器的构造函数中可以调用
addChangeHandler()
。当使用MVP时,它可能会进入演示者的绑定方法。

是的,但有时列表中的项目需要与其他外部变量交互,因此如果放入视图,则可能需要将外部变量带过来。您是对的,使用MVP时,它可能会进入演示者。 itm 1 itm 1