首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建自定义Enum类型

创建自定义Enum类型
EN

Stack Overflow用户
提问于 2017-02-01 15:37:59
回答 2查看 2.3K关注 0票数 4

我想为像https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.core.ValueState.html#.Error这样的自定义控件创建一个自定义枚举类型。

我的问题是:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-07 23:14:27

下面是一个例子:https://embed.plnkr.co/DhtkXOkMi12D1AYK

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

  • 枚举定义必须是普通对象。在内部,它通过sap/base/util/isPlainObject进行验证。
  • 每个键值对必须是彼此相同的
  • 不支持重命名。
  • 只支持类型字符串的键和值。
代码语言:javascript
复制
{
  Red: "Red",
  Blue: "Blue",
  Yellow: "Yellow"
}

为了实际使用枚举对象:

  1. 枚举对象必须首先是全局访问的。这样做的一种方法是定义一个由普通对象组成的模块,并在模块名下提供它。例如: /** * MyColor.js * path:“定制/控制/类型/”*命名空间:“演示”*/ sap.ui.define({ //模块值红色:“红色”,蓝色:“蓝色”,黄色:“黄色”,},真);//生成模块名:"demo.custom.control.type.MyColor“
  2. 必须在属性定义中将对象的模块名称分配给type: sap.ui.define( "sap/ui/core/Control“、"./ type /MyColor”)、//允许将枚举定义存储在类型注册表中“。//阻止通过同步XHR获取渲染器,函数(控制){”使用严格“;返回Control.extend("demo.custom.control.MyColorBox",{元数据:{selectedColor:{selectedColor:{ type:"demo.custom.control.type.MyColor“},},// . });};};

在上面的示例中,只有selectedColor属性等待"Red""Blue""Yellow"。让我们来测试一下:

  • new MyColorBox().getMetadata().getProperty("selectedColor").getType().isEnumType()返回true (ManagedObject在动态中创建sap.ui.base.DataType对象)✔️
  • new MyColorBox().setSelectedColor("Hans")抛出一个预期的错误:"Hans“是字符串类型,demo.custom.control.type.MyColor是属性"selectedColor”的元素.✔️
  • new MyColorBox().setSelectedColor("Yellow")成功地存储了值✔️

备注

,而不是,尝试通过DataType.create创建枚举类型。

不能使用此方法创建数组类型和枚举类型。它们是由DataType.getType在查找这类类型时动态创建的。(来源)

参考文献

票数 3
EN

Stack Overflow用户

发布于 2017-03-02 04:32:32

从定义你的枚举开始。

MessageType.js

代码语言:javascript
复制
sap.ui.define([], function() {
    "use strict";

    return {
      Unread: "Unread",
      Read: "Read"
    };
});

接下来,将此枚举标记为自定义控件中的依赖项,以便能够验证该值。

MyControl.js

代码语言:javascript
复制
    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..
            }
        });
    });

当然,检查是否处理有效枚举值的方法可以通过不同的方式实现,这取决于您想要做什么。

代码语言:javascript
复制
if (sMessageType === MessageType.Read) {
   // do something
} else if (sMessageType === MessageType.Unread) {
   // do something else 
} else {
   // throw an error?
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41983723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档