我有一个自定义的机制来定义JavaScript中的类,如下所示:
Tools.User = Tools.Class.define("Tools.User", Tools.Entity, {
Id: { type: "int", key: true, computed: true },
IsActive: { type: Boolean },
IsAdmin: { type: Boolean },
LName: { type: String },
FName: { type: String },
FullName: { get: function () { return this.FName + " " + this.LName; }, Type: String },
init: function (name, lname) {
this.IsAdmin = false;
this.IsActive = true;
this.FName = name;
this.LName = lname;
Tools.Entity.call(this, arguments);
},
onEndEdit: function () {
if (this.IsActive == false && this.IsAdmin == true) {
throw new Error(Messages.AdminCanNotBeDisabled);
}
this.parentClass.onEndEdit();
},
deActivate: function () {
if (this.IsAdmin == true) {
throw new Error(Messages.AdminCanNotBeDisabled);
}
this.IsActive = false;
}
});
如您所见,它支持虚拟/覆盖、自动实现的属性、构造函数等。
我想在JayData中使用我自己的类。为此,我开发了以下几行:
$data.EntityContext.extend("Tools.AppDb", {
Users: { type: $data.EntitySet, elementType: Tools.User }
});
var appDb = new Tools.AppDb({
provider: 'indexedDb', databaseName: 'AppDb'
});
appDb.onReady(function () {
});
很明显,以这种方式与Jaydata合作是不可能的。但是,如何以最少的代码更改来实现这一目标呢?
我认为这个错误消息没有用,但这是一个错误消息:
Uncaught TypeError: Cannot call method 'getPublicMappedProperties' of undefined
JayData 可以对 JayData 实体进行操作,以便跟踪更改并使独立于存储的数据管理成为可能。
因此,用户实体集的元素类型应派生自$data。实体:
$data.Entity.extend("Todo", {
Id: { type: "int", key: true, computed: true },
Task: { type: String, required: true, maxLength: 200 },
DueDate: { type: Date },
Completed: { type: Boolean }
});