Sapui5 创建自定义枚举类型

Sapui5 创建自定义枚举类型,sapui5,Sapui5,我想为自定义控件创建自定义枚举类型,如 我的问题是: 如何创建枚举类型 在自定义控件上,只能传递属性枚举 类型。如何验证给定的枚举是否有效 从定义枚举开始 MessageType.js sap.ui.define([], function() { "use strict"; return { Unread: "Unread", Read: "Read" }; }); sap.ui.define(["sap/ui/core/Contro

我想为自定义控件创建自定义枚举类型,如

我的问题是:

  • 如何创建枚举类型
  • 在自定义控件上,只能传递属性枚举
    类型。如何验证给定的枚举是否有效

从定义枚举开始

MessageType.js

sap.ui.define([], function() {
    "use strict";

    return {
      Unread: "Unread",
      Read: "Read"
    };
});
    sap.ui.define(["sap/ui/core/Control", "/path/to/MessageType.js"], function(Control, MessageType) {

        Control.extend("myControl", {
            someMethod: function(sMessageType) {
                // Validate if we are dealing with a valid message type
                var aKeys = Object.keys(MessageType);
                var bValidEnumValue = aKeys.some(function(sKey) {
                    if (MessageType[sKey]) {
                        return true;
                    }
                });

                // Do other stuff..
            }
        });
    });
接下来,将此枚举标记为自定义控件中的依赖项,以便能够验证该值

MyControl.js

sap.ui.define([], function() {
    "use strict";

    return {
      Unread: "Unread",
      Read: "Read"
    };
});
    sap.ui.define(["sap/ui/core/Control", "/path/to/MessageType.js"], function(Control, MessageType) {

        Control.extend("myControl", {
            someMethod: function(sMessageType) {
                // Validate if we are dealing with a valid message type
                var aKeys = Object.keys(MessageType);
                var bValidEnumValue = aKeys.some(function(sKey) {
                    if (MessageType[sKey]) {
                        return true;
                    }
                });

                // Do other stuff..
            }
        });
    });
当然,检查您是否正在处理有效的枚举值的方法可以通过不同的方式实现,具体取决于您尝试执行的操作

if (sMessageType === MessageType.Read) {
   // do something
} else if (sMessageType === MessageType.Unread) {
   // do something else 
} else {
   // throw an error?
}
以下是一个例子:

要在UI5中创建枚举类型,需要考虑某些规则:

  • 枚举定义必须是普通对象。在内部,它通过验证
  • 每个键值对必须彼此相同
  • 不支持重命名
  • 仅支持字符串类型的键和值 支持
{
红色:“红色”,
蓝色:“蓝色”,
黄色:“黄色”
}
也就是说,为了实际使用enum对象:

  • 枚举对象必须首先是全局可访问的。一种方法是定义一个由普通对象组成的模块,并使其在模块名下可用。例如:

    /**
    *文件:MyColor.js
    *路径:“自定义/控件/类型/”
    *名称空间:“演示”
    */
    ui.define({//模块值
    红色:“红色”,
    蓝色:“蓝色”,
    黄色:“黄色”,
    },对);//结果模块名:“demo.custom.control.type.MyColor”
    
  • 必须将对象的模块名称指定给特性定义中的
    类型

    sap.ui.define([
    “sap/ui/core/Control”,
    “/MyColorBoxRenderer”,
    “/type/MyColor”,//定义模块并阻止通过sync XHR获取它
    ],功能(控制){
    “严格使用”;
    return Control.extend(“demo.custom.Control.MyColorBox”{
    元数据:{
    特性:{
    “selectedColor”:{
    类型:“demo.custom.control.type.MyColor”
    },
    },
    },
    // ...
    });
    });
    
  • 在我上面的示例中,
    selectedColor
    属性只等待
    “红色”
    “蓝色”
    、或
    “黄色”
    。让我们测试一下:

    • new MyColorBox().getMetadata().getProperty(“selectedColor”).getType().isEnumType()
      返回
      true
      (返回创建的对象)✔️
    • new MyColorBox().setSelectedColor(“Hans”)
      按预期抛出错误:

      “Hans”的类型为字符串,属性“selectedColor”应为demo.custom.control.type.enum.PrimaryColor。。。✔️

    • new MyColorBox().setSelectedColor(“黄色”)
      成功存储该值✔️

    • 不要尝试通过
      数据类型创建枚举类型。创建

      无法使用此方法创建数组类型和枚举类型。它们是由
      DataType.getType
      在查找此类类型时动态创建的

    • 根据,枚举类型的默认值将是第一个键

      defaultValue
      将是在普通对象中找到的第一个键的值

      。。在我们的例子中,它将是红色的。但只有在调用了
      thatEnumType.getDefaultValue()
      时才是这样。值
      “Red”
      不适用于控件内元数据的
      defaultValue
      。在那里,如果没有另外定义,
      defaultValue
      将只是
      未定义

    工具书类
    • (搜索“枚举”事件)
    • 文档主题