首页 > 解决方案 > 获取 XML 片段中定义的控件 ID

问题描述

我有一个包含许多输入字段的片段。我想检查输入文本的输入字段的 ID。当我这样做时oEvent.getSource().getId(),我得到了"someId-controlId"。我不确定那"someId"是什么。但之后"-""controlId"肯定的。谁能建议如何将控件 ID 从我得到的输出中分离出来,或者如何在控制器中提取控件 ID?

标签: sapui5

解决方案


全局 ID 的创建方式取决于片段的创建方式。此外,这就是当前在 ID 段之间使用分隔符的方式:

  • 组件附加"---"
  • 视图追加"--"
  • 控件/元素附加"-"(例如,通过聚合绑定克隆实例)

样本输出:

"componentId---viewId--controlId-__clone0"

分隔符的数量、它们的插入方式,甚至是用于分隔每个段的字符都可能在以后的版本中发生变化。事实上,文档中有一条警告不要依赖当前的语法:

不要依赖特定的前缀语法,因为它可能会在某些时候发生变化。

更糟糕的是,当id定义中确实使用了这样的分隔符时,不会引发任何错误。假设分隔符可能包含在id定义中,使得从全局 ID 中提取正确的部分变得更加困难和不可预测。

为了使每个控件可区分,更好的方法是添加CustomData

<Input change=".onChange">
  <customData>
    <core:CustomData key="is" value="A" />
  </customData>
</Input>
<Input change=".onChange">
  <customData>
    <core:CustomData key="is" value="B" />
  </customData>
</Input>
<Input change=".onChange">
  <customData>
    <core:CustomData key="is" value="C" />
  </customData>
</Input>

然后可以通过APIdata在控制器中检索自定义数据:

onChange: function(oEvent) {
  const inputIsFrom = oEvent.getSource().data("is"); // returns: "A", "B", or "C"
  // ...
},

推荐阅读