3

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

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

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

此外,当我将枚举值分配给属性时,我想按名称而不是按值分配它。

例如,假设 Status 是 myEnum 类型:

myEntity.Status = myEnum.Valid;

代替

myEntity.Status = 1;

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

4

3 回答 3

2

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

于 2014-06-04T20:24:58.090 回答
0

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

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

请为此向Breeze 用户语音添加功能请求。这是一个好主意,我们非常重视这些建议。

于 2013-05-30T23:36:33.953 回答
0

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

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

 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;
     }
    
于 2015-05-05T11:12:43.263 回答