2013-02-21 1 views
0

Я использую Jaydata с индексированным индексомdbprovider, у меня проблема с добавлением сценария.Jaydata, когда операции с последовательным добавлением не работают

Когда есть несколько добавок, работает только первый!

$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!

Любая помощь будет оценена по достоинству.

ответ

0

Боюсь, что вы немного его перепутали. $ data.Entity и $ data.EntityContext предназначены для определения модели

var db = new ClientDatabase(...) 

БД контекст базы данных и не имеет какого-либо метода EntityContext или свойство

так что ваш код должен выглядеть следующим образом:

db.onReady() 

db.People.add(entity) 

db.saveChanges(...) 
+0

Да, вы правы, у db нет EntityContext, это была моя ошибка при вводе примера, потому что мы завершаем наш объект в EntityContext Property нашего объекта db! поэтому я отредактировал свой образец, но моя проблема - это только первая операция добавления! –

+0

Привет, Мохсен! Ниже вы можете найти примеры кода: http://jaydata.org/blog/understand_Jaydata_in_seven_simple_steps – Robesz

+0

Привет, Робес, я видел ваш образец раньше, проблема возникает, когда я хочу указать свойство Id каждого нового объекта самостоятельно. Я тоже хочу чтобы иметь несколько добавлений/сохранений, в этом сценарии работает только первая операция! другие операции добавления/сохранения не удались! –

3

Я внес много изменений в код, вы можете проверить его на JSFiddle.

Важные вещи:

  • использовать набранный коллекции db.People для запроса и вставки записей (не дб [ "_ Люди"])
  • использование типизированных entites - новое лицо()
  • если вы используете автоматически генерируемый идентификатор, лучше не устанавливать его вручную :)
  • после того, как я модифицировал все эти выше, ваша логика передала тот же 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);}); 
    }); 

}); 
+0

Спасибо за подробный ответ. Проблема заключается в том, что вычисление равно false, и я хочу делать операции добавления/сохранения отдельно, чтобы не делать второй в сохранении обратного вызова первого, вы можете проверить его прямо сейчас, он не добавит вторая запись, мне действительно нужно сделать несколько операций отдельно! –

+0

Удалось ли воспроизвести мою проблему? –

+0

Это потому, что спасение первого из них все еще происходит. Вот почему вы должны вызвать второе добавление в обработчике завершения saveChanges. Вы не можете использовать один и тот же бит до завершения сохранения (он смешивает состояние db).Для этого отдельно (самостоятельно) создайте два экземпляра db. –