我在webkit-sqlite适配器上遇到了问题。它以某种方式将key
保存在字符串格式而不是整数上。 Indexed-db工作得很好。它不会将密钥转换为字符串。请参阅下面的代码。
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"]
有人有补丁吗?
感谢。
答案 0 :(得分:2)
id
)建立为NVARCHAR(32)数据类型,出于兼容性原因这是有意义的。请记住,您可以将webkit-sqlite db与基于整数的id
字段一起使用,但是然后尝试将其与草坪椅集成将是复杂或不可能的。我的解决方案是在将数值传递给db之前将其转换为字符串。这可以在不修改适配器的情况下完成,但出于我的目的,我希望在indexeddb可用时将整数用作整数。
以下是我的代码的链接:http://wemarketyour.com/lawnchair-using-indexeddb-websql-dom-localstorage-adapters/
突出显示webkit-sqlite适配器中修改代码的行。与我的版本的不同之处在于,在仍然转换为字符串时,数据将被保留。因此,而不是int 1 =>字符串“1.0”,你得到int 1 =>字符串“1”。稍后当您检索数据时,您可以使用parseInt(key)将密钥转换回整数。
答案 1 :(得分:1)