是否可以动态创建数据实体/模型/上下文?

时间:2013-04-16 12:22:30

标签: javascript jquery jaydata

是否可以动态创建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);

的usal路径访问我的数据

我一直在使用JayData不到24小时,所以我道歉如果用术语来说这是荒谬的。

1 个答案:

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