我们希望从CellTable链接到属性编辑器页面。当用户点击某个项目时,我们使用SingleSelectionModel获得通知。 它初始化如下:
private final SingleSelectionModel<Device> selectionModel = new SingleSelectionModel<Device>();
然后我们分配选择更改处理程序:
selectionModel.addSelectionChangeHandler(this);
我们的选择更改处理程序如下所示:
@Override
public void onSelectionChange(SelectionChangeEvent event) {
Log.debug("DevicesPresenter: SelectionChangeEvent caught.");
Device selectedDevice = selectionModel.getSelectedObject();
if (selectedDevice != null) {
selectionModel.clear();
if (selectionModel.getSelectedObject() != null){
Log.debug("DevicesPresenter: selected item is " + selectionModel.getSelectedObject());
}
else{
Log.debug("DevicesPresenter: selected item is null");
}
deviceEditorDialog.setCurrentDevice(selectedDevice.getUuid());
// get the container data for this device
clientModelProvider.fetchContainersForDevice(selectedDevice.getUuid());
PlaceRequest request = new PlaceRequest.Builder()
.nameToken(NameTokens.deviceInfo)
.with("uuid", selectedDevice.getUuid())
.build();
Log.debug("Navigating to " + request.toString());
placeManager.revealPlace(request);
}
}
现在有两个问题:一下似乎总有两个SelectionChangeEvents,我真的看不出原因。另一件事是:正确的方式如何处理项目的选择和选择模型的相关清算?我们是以正确的方式做到的吗?
谢谢!
答案 0 :(得分:1)
如果您只想收到&#34;点击次数&#34;没有保持&#34;点击&#34;项目已选中,请改用NoSelectionModel
;一旦选择了某些东西,就不需要清除选择模型。
关于被调用两次的另一个问题,请仔细检查您是否已经两次添加选择处理程序(如果您可以对DevicesPresenter
进行单元测试,则会检查选择模型中的处理程序例如)
答案 1 :(得分:0)
在您的第selectionModel.addSelectionChangeHandler(this);
行中此引用了什么?
在这里,我的代码如何使用SingleSelectionModel
public class MyClass{
private final SingleSelectionModel<CountryDto> selectionModel = new SingleSelectionModel<CountryDto>();
...
public MyClass(){
cellTable.setSelectionModel(selectionModel);
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
CountryDto selected = selectionModel
.getSelectedObject();
if (selected != null) {
Window.alert("Selected country "+selected.getTitle());
}
}
});
}
}