在Gwt中编码addChangeHandler的最佳实践是什么?
在UiBinder中在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
@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