2012-06-06 62 views
1

我寫了這個代碼在Chrome中使用的WebSQL與JayData:實體在JayData方面是未定義

$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(部門);行,「部門」是undefined.What我該怎麼辦?

回答

2

問題是:$ data WebSQL提供程序名稱是:webSql,這種方式可以很好地工作。當然,還需要onReady處理程序。

1

您必須使用上下文的onReady函數。當您嘗試將新部門實體添加到實體集時,上下文尚未初始化。用的是這樣的:

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

我們推薦經常使用的回調函數,因爲一切是異步的,你不知道這個過程是準備回調之外。

+0

$ data.ODataProvider支持直接調用,而不需要onReady處理程序,但它總是最安全的使用它,因爲它不會傷害:)。 –