无法使用lokiJs

时间:2015-08-06 15:30:35

标签: lokijs

我尝试创建一个数据库,其中包含一个添加到此数据库的集合,并且更改已保存到IndexedDB。

以下是我的代码

  1. 两个控制器SaveController和LoadController。
  2. myApp.controller('SaveController',['$ scope','Loki',函数($ scope,Loki){

    // SAVE : will save App/Key/Val as 'finance'/'test'/{serializedDb}
    // if appContect ('finance' in this example) is omitted, 'loki' will be used
    var idbAdapter = new LokiIndexedAdapter('finance');
    
    var db = new loki('ProjectDb', { adapter: idbAdapter });
    
    var coll = db.addCollection('SampleCollection');
    coll.insert({ SampleId: 'Sample text.....' });
    
    db.saveDatabase();  // could pass callback if needed for async complete
    

    }]);

    然后在我的LoadController中使用

    myApp.controller('LoadController',['$ scope','Loki',函数($ scope,Loki){

    var idbAdapter = new LokiIndexedAdapter('finance');
    
    var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
    db.loadDatabase({}, function (result) {
        console.log(result);
    });
    
    alert(db.getCollection("SampleCollection"));
    

    }]);

    当我提醒“alert(db.getCollection(”SampleCollection“))时,我得到一个null;” 。它永远不会进入“loadDatabase”方法的回调。

    有什么东西我不见了吗?

    浏览器中的IndexedDB

    IndexedDB

    这里是页面html

    Page HTML

    lokijs script controller

    编辑默认的localstorage实施

    我使用loki js的默认实现,我尝试加载脱机数据库,每次显示结果为null,即使数据库存在

    var offlineDb = new loki('DbOfflineNew');
        offlineDb.loadDatabase({},function (result) {
            console.log(result);
            if (result == null) {
                alert('loading for first time..');
            }
            else {
                alert('existing load..');
            }
        });
    

    每当警报“第一次装载......”被解雇时..我在这里遗失的任何东西......?

1 个答案:

答案 0 :(得分:4)

基本上所有逻辑都需要在loadDatabase回调中。如果您在加载之前尝试console.log该集合,则它将为null。许多人陷入了这个陷阱。

换句话说:

myApp.controller('LoadController', ['$scope', 'Loki', function ($scope, Loki) {

var idbAdapter = new LokiIndexedAdapter('finance');

var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
db.loadDatabase({}, function (result) {
    console.log(result);
    // put your log call here.
    alert(db.getCollection("SampleCollection"));
});
}]);

希望这有帮助。