[英]GWT - How to programmatically uncheck a CheckboxCell when another CheckboxCell is checked?
給定兩個CheckboxCell
的checkboxA和checkboxB ,如果未選中checkboxA,如何以編程方式取消選中checkboxB? 從我已經試過,我能夠設定的值checkboxB = false
時checkboxA = 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);
}
}
}
});
}
這是我取消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才能將更改反映在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
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.