2

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"]

誰もこれに対するパッチを持っていますか?

ありがとう。

4

2 に答える 2

2

皮肉なことに、私は今日、ローンチェアを使った実験でまったく同じ問題を抱えていました. 最終的に、webkit-sqlite アダプターを変更して、キー値をデータベースに渡す前に文字列に変換するための行を追加/編集することにしました。この問題はid、芝生のキー値に使用されているフィールド (この場合は ) を NVARCHAR(32) データ型として確立する必要があるという事実から生じます。これは、互換性の理由から理にかなっています。整数ベースで webkit-sqlite db を使用できることに注意してください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 に答える