将自定义数据添加到服务器上的breeze元数据

将自定义数据添加到服务器上的breeze元数据,breeze,Breeze,在我正在开发的应用程序中,我创建了一些UI小部件,这些小部件是基于我的类和属性上的breeze元数据和属性生成的。因此,我在服务器上读取属性,并将它们添加到breeze生成的元数据中。在客户机上,加载元数据后,我在类型上添加这些属性。 这方面的一个例子 (在客户端上,加载丰富元数据后): 函数finishMetadata(md){ for(var i=0;i

在我正在开发的应用程序中,我创建了一些UI小部件,这些小部件是基于我的类和属性上的breeze元数据和属性生成的。因此,我在服务器上读取属性,并将它们添加到breeze生成的元数据中。在客户机上,加载元数据后,我在类型上添加这些属性。 这方面的一个例子 (在客户端上,加载丰富元数据后):

函数finishMetadata(md){
for(var i=0;i
这样,当我调用
manager.metadataStore.getEntityType(entityName)
时,我将获得所有entityType数据,包括我在服务器上添加的属性和所有属性

直到今天,这一切都很顺利。我已经在一些类(Customer:Person)上添加了继承(TPT),由于从Customer实体生成的元数据没有Person属性,所以我无法将它们添加到metadataStore类型。当我为
Person
调用
metadataStore.getEntityType
时,我会得到所有属性,但当我为
Customer
调用它时,我不会得到自定义属性(这是因为在上面的代码中,
Customer
没有列出父
Person
属性,因此我没有机会插入自定义属性

不管怎么说,这让人觉得很烦人,甚至解释起来也很混乱。现在我们来看一下,1.4.7版中的breeze,我想知道是否有一种更简单的方法可以将自定义数据添加到元数据中,而不会破坏TPT


注:我知道我可以手工制作元数据,但我希望尽可能坚持默认值,以避免将来的更改出现问题。因此,基本上所有元数据更改都应该是最小的和自动的,基于类。

好吧,我最终在做事情的方式上走得更远。而不仅仅是使用
manager.metadataStore.getEntityType
获取类型数据(不带自定义元数据),我查看entityType是否有基类型,如果有,我加载基类型数据并将其与子类合并。在我的情况下,基本上我获取
人员的dataProperties,并使用它们而不是
客户的dataProperties
。这是可行的,但我仍在寻找一种更干净、更简单的方法来做类似的事情这个

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;
        }
    }
}