Enums breeze是否为使用c#enum提供支持

Enums breeze是否为使用c#enum提供支持,enums,breeze,Enums,Breeze,我想使用breeze用enum填充我的下拉列表。它在breeze元数据中显示了enum,但我没有找到使用它的方法。breeze是否提供了对c#enums的支持?如果您使用的是标准的breeze WebApi服务器,则枚举值应全部以字符串形式存在,并可以以字符串形式保存回服务器。开箱即用,默认的Breeze WebApi服务器实现将在两个方向上自动将字符串转换为正确的枚举值 (注意:这不适用于使用当前MS WebApi/OData提供程序的服务器,因为MS还不支持使用此提供程序的枚举-MS将在其即

我想使用breeze用enum填充我的下拉列表。它在breeze元数据中显示了enum,但我没有找到使用它的方法。breeze是否提供了对c#enums的支持?

如果您使用的是标准的breeze WebApi服务器,则枚举值应全部以字符串形式存在,并可以以字符串形式保存回服务器。开箱即用,默认的Breeze WebApi服务器实现将在两个方向上自动将字符串转换为正确的枚举值

(注意:这不适用于使用当前MS WebApi/OData提供程序的服务器,因为MS还不支持使用此提供程序的枚举-MS将在其即将发布的4.0版本中支持此功能。)

例如,假设您的服务器端枚举如下所示:

public enum RoleType {
   Guest = 0,
   Restricted = 1,
   Standard = 2,
   Admin = 3
}
与具有“RoleType”属性的“Role”类结合使用时,以下查询将起作用:

    var query = new EntityQuery("Roles").where("RoleType", "==", 'Restricted');
    myEntityManager.executeQuery(query).then(...);
类似地,如果您想更改给定角色的角色类型,则可以

    role.RoleType = "Standard"; // assuming breeze backingStore adapter.
    myEntityManager.saveChanges();

如果您正在生成脱机breeze元数据,则可以获取元数据本身中的所有枚举定义,并且可以创建JS字典(关联数组)来填充所有枚举类型及其定义

我的情况是,我在我的web项目中使用了NancyFx(无EF)+Breeze+AngularJS。我离线生成元数据并将其存储在metadata.js文件中

在创建EntityManager之后,我在一个JS字典中提取了枚举定义,稍后我将其用于绑定下拉列表、显示相应的枚举字符串等

提取枚举定义并存储在JS字典中

        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;
        });
基于枚举名称和valueid检索枚举值的方法

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

            return result;
        }
将值绑定到下拉列表 现在,对于绑定下拉列表,只需调用enumDictionary[]并将结果存储在控制器变量中。 我使用的是Angular JS,所以我在html页面上使用了下面的代码

      <select ng-options="type.id as type.name for type in <VariableName>"
                        ></select>


您使用的是Breeze.js还是Breeze.sharp?谢谢您简要的回答。然而,我想知道我是否可以访问枚举以在客户端用它填充下拉列表。怎么可能呢?请建议