【问题标题】:breezejs: how to access enum metadata微风js:如何访问枚举元数据
【发布时间】:2015-05-05 19:12:43
【问题描述】:

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

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

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

另外,当我将枚举值分配给属性时,我希望按名称而不是按值来分配。

例如,假设 Status 是 myEnum 类型:

myEntity.Status = myEnum.Valid;

而不是

myEntity.Status = 1;

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

【问题讨论】:

  • 有人愿意吗?我的问题可能不够清楚吗?

标签: breeze


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这不是我的意思。我已经知道 Breeze 不支持 .Net 枚举上的元数据属性。事实上,我已经在 User Voice 上提出了这个功能的请求。我的意思是,我想使用诸如 metadataStore.getEnumType() 之类的函数来访问枚举类型,这样我就可以添加一个 displayName 属性(它是 javascript,所以我想我可以动态添加任何东西)。这有意义吗?
    • 这也是我急切寻找的东西……有什么新的发展吗?我的项目中有很多枚举,如果没有这种支持,我必须将它们全部转换为实体并将它们作为查找表。
    • 它当然在我们的列表中,但我们确实倾向于根据用户声音来确定优先级。所以请投票!如果您真的立即需要某些东西,我们会通过我们的咨询部门提供自定义扩展程序,微风@ideablade.com。
    【解决方案3】:

    这不是您问题的确切解决方案,但绝对可以帮助离线生成元数据的人。 我正在为我的 Web 项目使用 NancyFx(No EF) + Breeze + AngularJS 并离线生成微风元数据(在开发时使用 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;
       }
      

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多