在我正在开发的应用程序中,我创建了一些基于breeze元数据和类和属性属性生成的UI小部件。所以在服务器上我读取了属性,并将它们添加到breeze生成的元数据上。在客户端上,在加载元数据后,我在类型上添加了这些属性。 这方面的一个例子 (在富集元数据加载后,在客户端上):
function finishMetadata(md) {
for (var i = 0; i < md.schema.entityType.length; i++) {
var et = md.schema.entityType[i];
var etype = manager.metadataStore.getEntityType(et.name);
//isExportable is a class attribute
etype.isExportable = et.isExportable;
for (var j = 0; j < et.property.length; j++) {
var p = et.property[j];
var prop = etype.getProperty(p.name);
//displayName is a property attribute
prop.displayName = p.displayName ? p.displayName : p.name;
}
}
}
有了这个,当我调用manager.metadataStore.getEntityType(entityName)
时,我得到所有的entityType数据,包括我在服务器上添加的属性和所有属性。
直到今天这个工作正常。我在某些类(Customer:Person)上添加了继承(TPT),并且由于Customer实体生成的元数据没有Person属性,因此我无法将它们添加到metadataStore类型。当我为metadataStore.getEntityType
调用Person
时,我会获得所有属性,但是当我为Customer
调用它时,我没有获得自定义属性(这是因为上面的代码{{1}没有列出父Customer
属性,所以我没有机会插入我的自定义属性。
无论如何,即使要解释它,这也会让人感到烦恼和混乱。所以我们在1.4.7版本中轻松一下,我想知道是否有一种更简单的方法可以将自定义数据添加到不会破坏TPT的元数据中?
PS:我知道我可以手工制作元数据,但我希望尽可能坚持默认,以避免将来的更改出现问题。因此,基于类,基本上所有元数据更改都应该是最小的和自动的。
答案 0 :(得分:1)
好吧,在我正在做事的路上,我最终走得更远了。我不是只使用manager.metadataStore.getEntityType
来获取类型数据(不带来我的自定义元数据),而是查看我的entityType是否有baseType,如果有,我加载该基类型数据并将其与子类合并。在我的情况下,基本上我得到Person
的dataProperties并使用它们而不是Customer
的dataProperties。它可以工作,但我仍然希望能够采用更简洁的方式来做这样的事情。