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 传递给回调,所以我有 3 条记录而不是 2 条。我通过删除回调函数定义简化了代码

如果您想实现此行为,请查看 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 回答
-1

我希望这对某人有所帮助……它对我有用…… http://jaydata.org/forum/viewtopic.php?f=3&t=184

于 2013-10-29T03:16:36.653 回答