我注意到在元数据中有一个对象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; }