gpt4 book ai didi

java - GWT - 当选中另一个 CheckboxCell 时,如何以编程方式取消选中一个 CheckboxCell?

转载 作者:行者123 更新时间:2023-12-02 11:11:28 26 4
gpt4 key购买 nike

给定两个 CheckboxCellcheckboxAcheckboxB,如果未选中 checkboxA,如何以编程方式取消选中 checkboxB?根据我的尝试,我可以在 checkboxA = false 时设置 checkboxB = false 的值,但此更改并未反射(reflect)在 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);
}
}
}
});
}

这是我取消设置 checkboxB 的方法,该方法正在更改数据库中的值,但不会更改 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 需要刷新才能将更改反射(reflect)在 UI 中。这对于表中的所有其他字段都非常有效,但它不适用于 CheckboxCells。

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

那么,当单击一个 CheckboxCell 时,我应该如何触发另一个 CheckboxCell 中的 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();
}
});
}

此外,在 performCheckboxAOperation 中,您调用 unsetB(result); - 它应该是 unsetB(note);

您需要了解,在 onSuccess 中您会获得 Note 的副本。 result 对象不在 DataProvider 中,note 中。并且您应该更改 note 的值。

关于java - GWT - 当选中另一个 CheckboxCell 时,如何以编程方式取消选中一个 CheckboxCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com