我有一个 addProductButton
,单击它会弹出一个 DialogBox
,其中包含 bookNameTextBox
、bookCategoryTextBox
和 addBookButton
。单击addBookButton
,它将bookNameTextBox
和bookCategoryTextBox
内容插入数据库。如果成功,它应该隐藏 DialogBox
和 updateList()
以下代码可以实现这一目标,但我不确定它是否正确,或者是否有更好的方法来实现相同的结果。
主
类
addProductButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//display addBookDialogBox
AddBookDialog abd = new AddBookDialog();
abd.displayDialog(new Callback() {
@Override
public void onSuccess() {
updateList();
}
public void onFailure() {
}
});
}
});
public void updateList() {
}
AddBookDialog
类
public class AddBookDialog extends DialogBox {
private Callback callback;
private static AddBookDialogUiBinder uiBinder = GWT
.create(AddBookDialogUiBinder.class);
interface AddBookDialogUiBinder extends UiBinder<Widget, AddBookDialog> {
}
public AddBookDialog() {
setWidget(uiBinder.createAndBindUi(this));
}
public void displayDialog(Callback callback2) {
callback = callback2;
this.center();
}
@UiHandler("addBookButton")
void onAddBookButtonClick(ClickEvent event) {
//save book to database
Database db = Database.openDatabase("Store", "1.0", "My Store", 5 * 1024 * 1024);
db.transaction(new TransactionCallback() {
public void onTransactionStart(SQLTransaction tx) {
tx.executeSql("INSERT INTO products (bookName, bookCategory) VALUES (?, ?)", new Object[] { bookNameTextBox.getText().toString(), bookCategoryTextBox.getText().toString() });
}
public void onTransactionFailure(SQLError error) {
}
public void onTransactionSuccess() {
callback.onSuccess();
}
});
this.hide();
}
}
回调
接口(interface)
public interface Callback {
void onSuccess();
void onFailure();
}
最佳答案
我在这里没有看到它的用途,为什么不将 updateList();
放在 onTransactionStart()
方法中?
CallBacks 用于异步,这里的 TransactionCallback 已经做到了这一点,所以我不明白为什么你会在内部使用另一个回调。
顺便说一句,如果您确实需要回调,为什么不使用 AsyncCallback由gwt提供?
编辑:
那么适当的方法是使用 updateList()
方法创建一个接口(interface)。让你的主类实现它,并将 displayDialog()
方法的参数类型更改为你的接口(interface)类型而不是 CallBack 类型。
关于java - 这是回调的正确用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282656/