我注意到在元数据中有一个对象entityType,但也有一个对象enumType。
我们使用manager.metadataStore.getEntityType()来访问实体的元数据。
我们如何为给定的枚举做到这一点?如何从元数据中创建客户端的枚举?
另外,当我为一个属性分配一个枚举值时,我想按名称而不是按值来。
例如,假设Status的类型为myEnum:
myEntity.Status = myEnum.Valid;
而不是
myEntity.Status = 1;
breeze是否有任何辅助函数来访问枚举值?
答案 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;
});
我创建了一个方法来获取特定枚举的所有枚举值。这将用于绑定下拉列表。
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;
}