我正在使用Angular构建一个离线HTML页面,并使用ydn-db进行离线存储。
我有像这样的数据库服务,
demoApp.SericeFactory.database = function database() {
var database = {
dataStore: null,
admins: [],
students: [],
errors: [],
getadmindata: function(username) {
self = null, that = this
database.dataStore.get('admins', username).done(function(record) {
that.self = record;
return record;
}).fail(function(e) {
console.log(e);
database.errors.push(e);
});
return self; //This does not change.
}
};
database.dataStore = new ydn.db.Storage('DemoApp');
angular.forEach(INITSTUDENTS, function(student) {
database.dataStore.put('students', student, student.matricno);
database.students.push(student);
});
angular.forEach(INITADMINS, function(admin) {
database.dataStore.put('admins', admin, admin.username);
database.admins.push(admin);
});
return database;
我还有一个试图使用数据库的控制器;
function AppCntl ($scope, database) {
var user = database.getadmindata('user'); //I get nothing here.
}
我尝试过的,
我尝试将self
更改为var self
我试过像这样拆分函数
rq = database.dataStore.get('admins', 'user');
rq.done(function(record), {
self = record;
alert(self.name) //Works.
});
alert(self) //Doesn't work.
我经历过像这样的问题o StackOverflow但是没有什么似乎对我有用,或者我可能只是在找错了地方。
答案 0 :(得分:0)
数据库请求是异步的,因此它会在代码执行结束后执行。
所以当最后alert
执行时,self仍未定义。在db请求完成后执行Secound alert
,这通常是正确的设计模式。
编辑:
我已成功使用以下代码:
// Database service
angular.module('myApp.services', [])
.factory('database', function() {
return new ydn.db.Storage('feature-matrix', schema);
}
});
// controller using database service
angular.module('myApp.controllers', [])
.controller('HomeCtrl', ['$scope', 'utils', 'database', function($scope, utils, db) {
var index_name = 'platform, browser';
var key_range = null;
var limit = 200;
var offset = 0;
var reverse = false;
var unique = true;
db.keys('ydn-db-meta', index_name, key_range, limit, offset, reverse, unique)
.then(function(keys) {
var req = db.values('ydn-db', keys);
req.then(function(json) {
$scope.results = utils.processResult(json);
$scope.$apply();
}, function(e) {
throw e;
}, this);
});
}])
完整的应用程序位于https://github.com/yathit/feature-matrix
正在运行演示应用:http://dev.yathit.com/demo/feature-matrix/index.html