2013-05-28 32 views
3

我注意到在元数据中有一个对象entityType,但也是一个对象enumType。breezejs:如何访问枚举元数据

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

对于给定的枚举,我们该怎么做?我如何从元数据中创建客户端的枚举?

此外,当我将一个枚举值赋给一个属性时,我想按名称而不是按值。

举例来说,假设状态的类型是myEnum的:的

myEntity.Status = myEnum.Valid; 

代替

myEntity.Status = 1; 

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

+0

any for the?我的问题可能不够清楚吗? – Sam

回答

0

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

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

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

+1

这不完全是我的意思。我已经知道Breeze不支持.Net枚举的元数据属性。实际上,我已经在用户语音上为此功能打开了一个请求。我的意思是,我想使用像metadataStore.getEnumType()这样的函数来访问枚举类型,所以我可以添加一个displayName属性(它是javascript,所以我想我可以动态添加任何东西)。它有任何意义吗? – Sam

+0

这是我热切期待的东西......有没有新的发展?我的项目中有很多枚举,没有这个支持,我必须将它们全部转换为实体并将它们作为查找表。 – newman

+0

这当然是在我们的名单上,但我们倾向于根据用户语音确定优先级。所以请投票!如果您确实需要立即采取措施,我们可以通过[email protected]提供定制的扩展程序,以便通过我们的咨询部门轻松实现。 –

2

这个问题在我写的时候仍然是开放的。但是,您可能需要查看this SO question答案中所述的解决方法。

+0

谢谢,我会看看它。 – Sam

0

那么这不是你的问题的确切解决方案,但肯定可以帮助那些正在生成元数据的人离线。 我为我的web项目使用NancyFx(无EF)+ Breeze + AngularJS并在离线生成微风元数据(在开发中使用EF方法),然后在js文件中使用它。
我也遇到过类似的情况,我想要获取所有枚举值绑定下拉列表并显示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; 
     }); 
  • 我创建的方法来获取所有枚举值用于特定的枚举。这将用于绑定下拉菜单。

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

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