我正在使用一个SQLite DB作为一个Web应用程序的存储系统。我一直在使用直接在应用程序中从查询返回的对象。例如:不可变的铬sqlite返回对象
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";
}
当然我可以把所有的数据库对象转换为可变对象,但我宁愿不会这样做。
这是一个预期的行为?我可以请求可变对象吗?
我使用谷歌浏览器9.0在Mac OS X
我做这个作为一种解决方法: 功能convert_to_mutable(result_object) { \t VAR可变=新的对象(); \t for(var key in result_object){mutable [key] = result_object [key]}; \t return \t mutable; } – 2011-02-23 17:26:12
你能展示你如何创建数据库或链接到它的文档? – Havvy 2013-12-18 01:56:30
我这样做:https://github.com/whoisstan/hyper_books/blob/master/js/book_storage.js - 项目的目标是编写一个基于html5的电子书阅读器,用于版权书籍,我没有花费我应该在过去的几年里花很多时间。 – 2013-12-18 14:08:41