breezejs:如何访问枚举元数据

时间:2013-05-28 09:35:02

标签: breeze

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

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

我们如何为给定的枚举做到这一点?如何从元数据中创建客户端的枚举?

另外,当我为一个属性分配一个枚举值时,我想按名称而不是按值来。

例如,假设Status的类型为myEnum:

myEntity.Status = myEnum.Valid;

而不是

myEntity.Status = 1;

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

3 个答案:

答案 0 :(得分:2)

我写的时候这个问题仍然存在。但您可能想看看this SO question的答案中描述的解决方法。

答案 1 :(得分:0)

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

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

请向Breeze User Voice添加功能请求。这是一个好主意,我们非常重视这些建议。

答案 2 :(得分:0)

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

所以我编写了原始的JS方法  1.从元数据中提取JS字典(关联数组)中的所有枚举及其值(Id& Name)。

 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;
        });
  1. 我创建了一个方法来获取特定枚举的所有枚举值。这将用于绑定下拉列表。

    function GetEnumDictionary(enumName) {
    return enumDictionary[enumName];
    } 
    
  2. 我创建的另一种方法是根据值获取特定的枚举名称。

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