2

我在 webkit-sqlite 适配器上遇到问题。它以某种方式保存key字符串格式而不是整数。索引数据库工作得很好。它不会将密钥转换为字符串。请看下面的代码。

var ppl = Lawnchair({adapter: 'webkit-sqlite', name:'people', record:'person'}, function(people) {
    // anon fn bound to the instance
    this.save({key:1, id:1, a:1, name:'nino'}, function(obj){
        console.log(obj);
    });

    // anon fn bound to the instance
    this.save({key:'2', id:2, a:2, name:'paolo'}, function(obj){
        console.log(obj);
   });

    // get all the keys
    this.keys(function(keys) {
        console.log('keys:', keys);
    });

    // get 1
    this.get(1, function(key) {
        console.log('key:', key);
    });

    // get '2'
    this.get('2', function(key) {
        console.log('key:', key);
    });

    // we can also clear the entire collection w/ nuke
    this.nuke()
});

输出:

undefined
Object {key: 1, id: 1, a: 1, name: "nino"}
Object {key: "2", id: 2, a: 2, name: "paolo"}
keys: ["1.0", "2"]
key: undefined
key: Object {key: "2", id: 2, a: 2, name: "paolo"}

错误:

keys: ["1.0", "2"]应该是keys: [1, "2"]

有人有这个补丁吗?

谢谢。

4

2 回答 2

2

具有讽刺意味的是,我今天在试验草坪椅时遇到了完全相同的问题。我最终决定修改 webkit-sqlite 适配器以添加/编辑行,以便在将键值传递给数据库之前将它们转换为字符串。问题源于这样一个事实,即用于id草坪椅键值的字段(在本例中)必须建立为 NVARCHAR(32) 数据类型,出于兼容性原因,这是有意义的。请记住,您可以使用基于整数的 webkit-sqlite 数据库id场,但试图将其与草坪椅结合起来将是复杂的或不可能的。我的解决方案是在将数值传递给数据库之前将它们转换为字符串。这可以在不修改适配器的情况下完成,但出于我的目的,我想在 indexeddb 可用时将整数用作整数。

这是我的代码的链接:http ://wemarketyour.com/lawnchair-using-indexeddb-websql-dom-localstorage-adapters/

我在 webkit-sqlite 适配器中修改代码的行被突出显示。与我的版本不同的是,在仍转换为字符串的同时,数据被保留了。因此,您得到的不是 int 1 => string "1.0",而是 int 1 => string "1"。稍后当您检索数据时,您可以使用 parseInt(key) 将键转换回整数。

于 2013-07-27T00:29:43.170 回答
1

其实我也修好了。

https://github.com/brianleroux/lawnchair/issues/58#issuecomment-21647070

你可以在那里检查。让我知道。

于 2013-07-30T16:05:06.117 回答