我有一个addProductButton
,点击它会显示一个DialogBox
,其中包含bookNameTextBox
,bookCategoryTextBox
和addBookButton
。点击addBookButton
,它会将bookNameTextBox
和bookCategoryTextBox
内容插入数据库。如果成功,则应隐藏DialogBox
和updateList()
以下代码可以实现这一目标,但我不确定它是否合适,或者是否有更好的方法来实现相同的结果。
Main
上课
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();
}
}
Callback
界面
public interface Callback {
void onSuccess();
void onFailure();
}
答案 0 :(得分:1)
我在这里看不到它的使用,为什么不把updateList();
放在onTransactionStart()
方法中?
CallBacks用于Asynchronism,这里的TransactionCallback已经这样做了,所以我不明白你为什么要在里面使用另一个回调。
顺便说一下,如果你确实需要回调,为什么不使用gwt提供的AsyncCallback?
编辑:
然后,适当的方法是使用updateList()
方法创建一个界面。让您的主类实现它,并将displayDialog()
方法的参数类型更改为您的接口类型而不是CallBack类型。