GWT - 当选中另一个复选框单元格时,如何以编程方式取消选中一个复选框单元格?



给定两个CheckboxCell复选框A复选框B,如果复选框A未选中,如何以编程方式取消选中复选框B?从我尝试的内容来看,我能够在checkboxA = false时设置checkboxB = false的值,但此更改并未反映在 UI 中。

我的表格与复选框 -

public void buildTable() {
myDataProvider.addDataDisplay(myTable);
// other columns
Column<Note, Boolean> checkboxA = new Column<Note, Boolean>(new CheckboxCell()){
@Override
public Boolean getValue(Note object) {
return object.isAChecked();
}
};
checkboxA.setFieldUpdater(new FieldUpdater<Note, Boolean>() {
@Override
public void update(int index, Note object, Boolean value) {
performCheckboxAOperation(object, value);
}
});
Column<Note, Boolean> checkboxB = new Column<Note, Boolean>(new CheckboxCell()){
@Override
public Boolean getValue(Note object) {
return object.isBChecked();
}
};
checkboxB.setFieldUpdater(new FieldUpdater<Note, Boolean>() {
@Override
public void update(int index, Note object, Boolean value) {
performCheckboxBOperation(object, value);
}
});
myTable.addColumn(checkboxA, "BOX A");
myTable.addColumn(checkboxB, "BOX B");
}

将复选框 A 的值存储在数据库中的方法,如果checkboxA == false,则在数据库中设置checkboxB = false-

public void performCheckboxAOperation(Note note, Boolean bool) {
this.presenter.performBoxOperation(note, bool, new AsyncCallback<CNote>() {
@Override
public void onFailure(Throwable caught) {
// error logic
}
@Override
public void onSuccess(CompanyNote result) {
cleanupDataProvider.flush();
if (result.isAChecked() == false) {
if (result.isBChecked() == true) {
unsetB(result);
}
}
}
});
}

这是我取消设置复选框B的方法,它正在更改数据库中的值,但不更改UI中的值-

private void unsetB(Note note) {
this.presenter.performBoxOperation(note, false, new AsyncCallback<Note>() {
@Override
public void onFailure(Throwable caught) {
// error logic
}
@Override
public void onSuccess(Note result) {
myDataProvider.flush();
myTable.redraw();
}
});
}

据我了解,需要刷新列表数据提供程序才能将更改反映在UI中。这适用于表中的所有其他字段,但它不适用于 CheckboxCells。

我已经尝试redraw()表格,如上所示,但没有任何运气。

那么,当单击一个复选框单元格时,我应该怎么做才能在另一个复选框单元格中触发 UI 更改?

我认为您忘记实际更改对象的值。

private void unsetB(final Note note) {
this.presenter.performBoxOperation(note, false, new AsyncCallback<Note>() {
// ...
@Override
public void onSuccess(Note result) {
note.setB(false);  // set B value or copy `result` to `note`
// (`note` must be final)
myDataProvider.flush();
myTable.redraw();
}
});
}

另外,在您称unsetB(result);performCheckboxAOperation- 它应该是unsetB(note);

您需要了解,在onSuccess中您将获得Note的副本。result对象不在DataProvider中,note在中。你应该改变note的值。

最新更新