0

Jaydata を Indexeddbprovider と共に使用していますが、シナリオの追加に問題があります。

複数の追加がある場合、最初の追加のみが機能します。

$data.Entity.extend("Person", {
   Id: { type: "int", key: true, computed: false },
   Task: { type: String, required: true, maxLength: 200 },
   DueDate: { type: Date },
   Completed: { type: Boolean },
   University: { type: "int"},
   Degree: { type: "int" }
 });

  $data.EntityContext.extend("ClientDatabase", {
        People: { type: $data.EntitySet, elementType: Person }
  });

  var db = new ClientDatabase({
        provider: 'indexedDb', databaseName: 'ClientDB', version: 1
  });

var newEntity = {
    Id: 1,
    Task: 'task1',
    DueDate: new Date(),
    Completed: false,
    University: 1,
    Degree: 1
};

 var newEntity2 = {
    Id: 4,
    Task: 'task4',
    DueDate: new Date(),
    Completed: false,
    University: 4
    Degree: 4
};

add(db, newEntity, entity1AddedSuccessfully);

function entity1AddedSuccessfully(){
  add(db, newEntity2);
}

function add(db, entity, callback){
    db.onReady({
        success: function () {
            db["_People"].add(entity);
            db.saveChanges(function () {
                if (callback !== undefined) {
                    callback(entity);
                }
            });
        }
    });
 }

問題はこのシナリオにあります。newEntity が ClientDB に追加されたばかりで、newEntity2 がありません!

どんな助けでも大歓迎です。

4

3 に答える 3

3

コードに多くの変更を加えました。JSFiddleで確認できます。

大事な事:

  • 型指定された db.People コレクションを使用して、レコードのクエリと挿入を行います (db["_People"] ではありません)。
  • 型付きエンティティを使用 - new Person()
  • 自動生成された ID を使用する場合は、手動で設定しない方がよいでしょう :)
  • 上記のすべてを変更した後、ロジックは同じ newEntity をコールバックに渡したので、2 つではなく 3 つのレコードがありました。コールバック関数の定義を削除してコードを簡素化しました。

この動作を実現したい場合は、JSFiddle コードを確認し、フィードバックを共有してください

   $data.Entity.extend("Person", {
   Id: { type: "int", key: true, computed: true },
   Task: { type: String, required: true, maxLength: 200 },
   DueDate: { type: Date },
   Completed: { type: Boolean },
   University: { type: "int"},
   Degree: { type: "int" }
 });

$data.EntityContext.extend("ClientDatabase", {
    People: { type: $data.EntitySet, elementType: Person }
});

var db = new ClientDatabase({
    provider: 'indexedDb', databaseName: 'ClientDB', version: 1
});

db.onReady(function(){
    var newEntity = new Person( {
        Task: 'task1',
        DueDate: new Date(),
        Completed: false,
        University: 1,
        Degree: 1
    });

     var newEntity2 = new Person({
        Task: 'task4',
        DueDate: new Date(),
        Completed: false,
        University: 4,
        Degree: 4
    });

    db.People.add(newEntity);
    db.saveChanges(function() {
        db.People.add(newEntity2);
        db.saveChanges(function() {alert(newEntity2.Id);});
    });

});
于 2013-02-21T13:11:41.117 に答える
0

少し混同してしまったようで申し訳ありません。$data.Entity と $data.EntityContext はモデル定義用です

var db = new ClientDatabase(...)

db はデータベース コンテキストであり、EntityContext メソッドまたはプロパティはありません

したがって、コードは次のようになります。

db.onReady()

db.People.add(entity)

db.saveChanges(...)
于 2013-02-21T12:08:24.090 に答える