2012-05-18 63 views
0

我正在執行方法Datastore.delete(鍵)組成我的GWT Web應用程序,AsyncCallback調用了onSuccess()方法。我立即刷新http://localhost:8888/_ah/admin,實體i意圖刪除仍然存在。同樣,我立即刷新我的GWT Web應用程序,我想刪除的項目仍然顯示在網頁上。請注意onSuccess()已被調用。如何知道Google AppEngine數據存儲區的操作已完成

那麼,我怎麼知道實體何時已經被刪除?

public void deleteALocation(int removedIndex,String symbol){ 
    if(Window.confirm("Sure ?")){ 
     System.out.println("XXXXXX " +symbol); 
     loCalservice.deletoALocation(symbol, callback_delete_location); 
    } 

} 
public AsyncCallback<String> callback_delete_location = new AsyncCallback<String>() {  

    public void onFailure(Throwable caught) { 
     Window.alert(caught.getMessage()); 
    } 

    public void onSuccess(String result) { 
     // TODO Auto-generated method stub 
     int removedIndex = ArryList_Location.indexOf(result); 
     ArryList_Location.remove(removedIndex); 
     LocationTable.removeRow(removedIndex + 1); 
     //Window.alert(result+"!!!"); 
    } 
}; 

服務器:

public String deletoALocation(String name) { 
    // TODO Auto-generated method stub 
    Transaction tx = Datastore.beginTransaction(); 
    Key key = Datastore.createKey(Location.class,name); 
    Datastore.delete(tx,key); 
    tx.commit(); 
    return name; 
} 

,對不起,我的英語:-)

+0

每次重新加載頁面時,都要查詢數據庫以獲取實際數據。 – kapand

回答

0

不好按照docs

返回Key對象(如果一個模型實例)或者與存儲的模型實例相對應的Key對象列表(如果給出實例列表)。

如果你需要一個工作刪除功能的例子,這可能是help。 108行

class DeletePost(BaseHandler): 

def get(self, post_id): 
    iden = int(post_id) 
    post = db.get(db.Key.from_path('Posts', iden)) 
    db.delete(post) 
    return webapp2.redirect('/')   
0

如何檢查實體的存在?通過查詢?

對HRD的查詢是eventually consistent,這意味着如果您添加/刪除/更改實體,則立即查詢它,您可能看不到更改。原因在於,當您編寫(或刪除)實體時,GAE會異步更新索引和實體in several phases。由於這需要一些時間,可能會發生,您沒有立即看到更改。

鏈接的文章討論了減輕這種限制的方法。

相關問題