获取XML片段中定义的控件ID

时间:2018-05-31 18:26:47

标签: sapui5

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

1 个答案:

答案 0 :(得分:0)

创建全局ID的方式depends on how the fragment was created。此外,这就是ID段之间当前的分隔符:

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

示例输出:

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

分隔符的数量,它们的插入方式,甚至用于分隔每个段的字符可能会在以后的版本中更改。事实上,documentation中有一个警告,不要依赖当前的语法:

  

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

更糟糕的是,在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>

然后可以通过API data

在Controller中检索自定义数据
onChange: function(oEvent) {
  const inputIsFrom = oEvent.getSource().data("is"); // returns: "A", "B", or "C"
  // ...
},