0

我正在从我的 GWT Web 应用程序中执行方法 Datastore.delete(key),AsyncCallback 调用了 onSuccess() 方法。我http://localhost:8888/_ah/admin立即刷新,我打算删除的实体仍然存在。类似于,我立即刷新我的 GWT Web 应用程序,我打算删除的项目仍然显示在网页上。注意 onSuccess() 已被调用。

那么,我怎么知道实体何时已被删除?

 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;
}

对不起,我英语不好:-)

4

2 回答 2

0

根据文档

返回与存储的模型实例对应的 Key 对象(如果给定一个模型实例)或 Key 对象列表(如果给定实例列表)。

如果您需要一个有效的删除功能示例,这可能会有所帮助。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('/')        
于 2012-05-18T12:36:03.680 回答
0

你如何检查实体的存在?通过查询?

HRD 上的查询最终是一致的,这意味着如果您添加/删除/更改实体然后立即查询它,您可能看不到更改。这样做的原因是,当您写入(或删除)一个实体时,GAE会分几个阶段异步更新索引和实体。由于这需要一些时间,因此您可能不会立即看到更改。

链接文章讨论了减轻此限制的方法。

于 2012-05-18T23:09:20.030 回答