Сущность в контексте JayData не определена

Я написал этот код для использования WebSQL с JayData в Chrome:

 $data.Entity.extend("$org.types.Department",
 {
     Id: { type: "int", key: true, computed: true },
     Name: { type: "string", required: true }
 });

$data.EntityContext.extend("$org.types.OrgContext", {
    Department: { type: $data.EntitySet, elementType: $org.types.Department }
});

$org.context = new $org.types.OrgContext({ name: "WebSQL", databaseName:"Organization",
    dbCreation: $data.storageProviders.sqLite.DbCreationType.DropTableIfChanged
});

var department = new $org.types.Department({ Name: 'Department1' });
$org.context.Department.add(department);
$org.context.saveChanges();

но проблема в том, что в $org.context.Department.add(department); строка "Отдел" не определена. Что мне делать?


person Hadi zamani    schedule 06.06.2012    source источник


Ответы (2)


Проблема заключалась в следующем: имя провайдера $data WebSQL: webSql, таким образом, пример работал отлично. Плюс, конечно, нужен был обработчик onReady.

person Peter Aron Zentai    schedule 06.06.2012

Вы должны использовать функцию onReady контекста. Когда вы пытаетесь добавить новую сущность отдела в набор сущностей, контекст еще не инициализирован. Использование такое:

$org.context.onReady(function(db){
    var department = new $org.types.Department({ Name: 'Department1' });
    db.Department.add(department);
    db.saveChanges(function(){
        ...
    });
});

Рекомендуется всегда использовать функции обратного вызова, потому что все асинхронно, и вы не знаете, готов ли процесс вне обратного вызова.

person Viktor Lázár    schedule 06.06.2012
comment
$data.ODataProvider поддерживает прямой вызов без необходимости использования обработчика onReady, но всегда безопаснее всего использовать его, так как он не может навредить :). - person Peter Aron Zentai; 06.06.2012