1

是否可以动态创建 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 小时,所以如果这对术语来说是荒谬的,我深表歉意。

4

1 回答 1

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 来演示问题。

于 2013-04-16T13:02:26.853 回答