是否可以动态创建JayData实体模型和上下文?然后使用它们?
我进行Ajax调用,然后执行以下操作
function prepareEntityModel(json)
{
// var entity = {
// Id: { type: "int", key:true },
// Name: { type: "string" },
// });
$data.Entity.extend("someData" + id, entity);
}
然后我尝试创建一个上下文。令我惊讶的是,这似乎有效:var t= "someData" + 81
function createContext(t)
{
$data.EntityContext.extend(t + "Context", {
t: { type: $data.EntitySet, elementType: t },
});
var fn = eval(t + "Context");
var context = new fn({
name: "webSql",
databaseName: "aDB"
});
return context;
}
上下文甚至似乎都回应了onReady()
事件。但是使用名称“t”创建表。在这一点上,我特意采取猜测。在上下文中,我无法通过context["someData" + id).addMany(data);
我一直在使用JayData不到24小时,所以我道歉如果用术语来说这是荒谬的。
答案 0 :(得分:1)
声明类型时,会返回类型定义,例如
var mytype = $data.Entity.extend("someData" + id, entity);
var newInstance = new mytype();
当你声明上下文时,你也会得到上下文定义,不需要eval()
var contexttype = $data.EntityContext.extend(t + "Context", {...
var context = new contexttype({...
表名可以使用'tableName'参数(更简单)指定,也可以通过给实体集指定一个好名字(更难)来实现,例如:
var contextDef = {};
contextDef[t] = { type: $data.EntitySet, elementType: t };
var fn = $data.EntityContext.extend(t + "Context", contextDef);
希望这有帮助,请不要犹豫,在这里或我们的论坛中提出更多问题。遇到问题时,最好的方法是创建一个小jsfiddle来演示问题。