Breezejs:如何访问枚举元数据



我注意到在元数据中有一个对象entityType,但也有一个对象enumType。

我们使用manager.metadataStore.getEntityType()来访问实体的元数据。

如何对给定的enum执行此操作?如何在客户端从元数据中创建枚举?

另外,当我将枚举值赋给一个属性时,我希望通过名称而不是通过值来赋值。

例如,假设Status是myEnum类型:

myEntity.Status = myEnum.Valid;

代替

myEntity.Status = 1;

是否有任何辅助函数来访问枚举的值?

在我写这篇文章的时候,这个问题还没有解决。但是您可能想看看这个问题的答案中描述的解决方法。

我假设您正在讨论在服务器上定义为。net枚举的数据属性,并且您希望在Breeze客户端上提供关于这些属性的额外元数据。

不幸的是,除了支持枚举值的。net类型的名称之外,Breeze还不支持枚举类型上的任何元数据。这是'enumType'属性,它将出现在服务器上由. net Enum支持的任何dataProperty上。(我们确实需要更好地记录)

请为此添加一个功能请求到微风用户声音。这是个好主意,我们会认真对待这些建议的。

这不是你问题的确切解决方案,但绝对可以帮助那些离线生成元数据的人。我正在使用NancyFx(没有EF) + Breeze + AngularJS为我的web项目和离线生成Breeze元数据(使用EF方法在开发),然后在js文件中使用它。我也遇到了类似的情况,我想让所有Enum值绑定下拉菜单,并显示对应于EnumValue(Id)的EnumName。我在网上搜索了一下,但没有多少符合我的设想。

所以我写了原始的JS方法1. 提取所有枚举及其值(Id &

在JS字典(关联数组)中查找元数据。
 var enumDictionary = {};
        JSON.parse(window.app.metadata).schema.enumType.forEach(function (enumType) {
            var newEnumValues = [];
            enumType.member.forEach(function (enumValue) {
                var newEnumValue = { id: enumValue.value, name: enumValue.name };
                newEnumValues.push(newEnumValue);
            });
            enumDictionary[enumType.name] = newEnumValues;
        });
  • 我创建了一个方法来获取特定枚举的所有枚举值。这将用于绑定下拉菜单。

    function GetEnumDictionary(enumName) {
    return enumDictionary[enumName];
    } 
    
  • 我创建的另一个方法,用于根据值获取特定的Enum名称。

    function GetEnumDictionaryValue(enumName, enumValueId) {
     var result = null;
     enumDictionary[enumName].some(function (enumValue) {
     if (enumValue.id == enumValueId) {
        result = enumValue.name;
        return;
    }
    });
      return result;
     }
    
  • 最新更新