【发布时间】:2011-07-02 21:45:45
【问题描述】:
我使用 sqlite DB 作为 webapp 的存储系统。我一直在应用程序中直接使用从查询返回的对象。例如:
function get_book_by_id(id,successCallback,errorCallback)
{
function _successCallback(transaction, results)
{
if(results.rows.length==0) {successCallback(null);}
else
{
book=results.rows.item(0);
successCallback(book);
}
}
db.transaction(
function (transaction) {
transaction.executeSql("SELECT id,title,content,last_read from books where id=?;",[id], _successCallback, errorCallback);
});
}
这将返回一个具有给定 id 的对象,所有列都作为属性提供。好的。我刚刚发现的问题是结果集对象的所有属性都是不可变的。因此,例如,如果我想更改属性“标题”,它不会生效,我认为这没有任何意义。示例:
get_book_by_id(1,handle,error);
function handle(book)
{
//THIS DOESN'T WORK, book.title is still what it was.
book.title=book.title+"more text";
}
我当然可以将所有数据库对象转换为可变对象,但我宁愿不这样做。
这是预期的行为吗?我可以请求可变对象吗?
我在 Mac OS X 上使用 google chrome 9.0。
【问题讨论】:
-
我这样做是一种解决方法:function convert_to_mutable(result_object) { var mutable=new Object(); for(var key in result_object){mutable[key]=result_object[key]};返回可变; }
-
你能说明你是如何创建数据库的或链接到它的文档吗?
-
我在这里做到了:github.com/whoisstan/hyper_books/blob/master/js/book_storage.js - 该项目的目标是为无版权的书籍编写一个基于 html5 的电子书阅读器,过去几年我没有花太多时间在它上面,我应该.
-
Stan Wiechers,您是否尝试过 Object.defineProperty() 使您的结果可变。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript sqlite html google-chrome