java - GWT - 当另一个 CheckboxCell 被选中时,如何以编程方式取消选中一个 CheckboxCell?
问题描述
给定两个checkboxA和checkboxB,如果未选中 checkboxA ,我如何以编程方式取消选中 checkboxB CheckboxCell
?根据我的尝试,我可以设置when的值,但此更改并未反映在 UI 中。checkboxB = false
checkboxA = false
我的带有复选框的表 -
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);
}
}
}
});
}
这是我取消设置 checkboxB 的方法,它正在更改 DB 中的值,而不是 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();
}
});
}
据我了解,需要刷新ListDataProvider才能使更改反映在 UI 中。这对表中的所有其他字段都非常有效,但不适用于 CheckboxCells。
redraw()
如上所示,我已经尝试过桌子,但没有任何运气。
那么,当单击一个 CheckboxCell 时,我应该怎么做才能触发另一个 CheckboxCell 中的 UI 更改?
解决方案
I think that you forgot to actually change the object's value.
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();
}
});
}
Also, in performCheckboxAOperation
you call unsetB(result);
- it should be unsetB(note);
You need to understand that in onSuccess
you get a copy of Note
. The result
object is not in the DataProvider
, note
is. And you should change note
's value.
推荐阅读
- python - 如何在 Python 包/扩展中使用 Crystal?
- php - 具有特定评论数量的 WordPress 后端显示帖子
- javascript - 将 HTML 文件内容加载到 dojo 对话框中
- python - 如何使用服务器的 2 个 IP 地址发送 HTTP 请求?
- git - Subgit 迁移卡住并在提交大文件时停止
- perl - 在 Perl 中从文件中删除一组行
- assembly - 带有 LEA 指令的 GAS ASM PIE x86-64 访问变量
- php - 模型窗口中未显示 ajax 值
- javascript - 单个字段中的多个月 - 为每个日历选择年份和月份
- python - ValueError:无法将字符串转换为浮点“jpg”Python