我创建了一个使用INdexedDb进行存储的FirefoxOS应用程序,我使用IDBWrapper进行了IndexedDB操作。我在Chrome和Firefox浏览器上测试了该应用,效果非常好。但是,只要我在模拟器上运行应用程序,应用程序就不会在IndexedDB中存储值。
当我尝试保存某些内容时,会抛出错误,指出'this.db'为空。
数据库创建代码
var dbOptions = {
storeName: 'geoDiary',
storePrefix: 'k2v-software-',
dbVersion: 1,
keyPath: 'ID',
autoIncrement: true,
indexes: [
{ name: 'Lat', keyPath: 'Lat', unique: false, multiEntry: false },
{ name: 'Lon', keyPath: 'Lon', unique: false, multiEntry: false },
{ name: 'Title', keyPath: 'Title', unique: false, multiEntry: false },
{ name: 'Description', keyPath: 'Description', unique: false, multiEntry: false },
{ name: 'Timestamp', keyPath: 'Timestamp', unique: false, multiEntry: false }
],
onError: function(error) {
$log.error(error);
}
};
// create instance of datastore
var idbDataStore = new IDBStore(dbOptions);
调用保存操作的函数。
$scope.saveToDB = function() {
//var ID = new Date().getTime();
var title = $scope.saveData.title;
var description = $scope.saveData.description;
var latitude = $scope.currentPosition.coords.latitude.toFixed(5);
var longitude = $scope.currentPosition.coords.longitude.toFixed(5);
var currentdate = new Date();
var timestamp = currentdate.getDate() + "/"
+ (currentdate.getMonth()+1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
var newRecord = {
//ID: ID,
Lat: latitude,
Lon: longitude,
Title: title,
Description: description,
Timestamp: timestamp
};
idbDataStore.put(newRecord, function () {
// success callback
//ID = null;
title = null;
description = null;
latitude = null;
longitude = null;
currentdate = null;
timestamp = null;
}, callbackError);
};
错误发生在idbstore.js上,这是我从Github为IDBWrapper获取的库。在该行中的文件是错误发生的地方,代码行在这里。
var putTransaction = this.db.transaction([this.storeName], this.consts.READ_WRITE);
错误this.db
为空。我无法设置断点并逐步执行代码以确定问题的确切位置,因为WebIDE未显示idbstore.js文件。有人可以帮我弄清楚发生了什么。提前谢谢。