通过 XML 视图在 SAPUI5 列表控件中显示计数器/索引

Jps*_*psy 1 xml sapui5

有没有办法在迭代 SAPUI5 列表控件的项目时访问 XML 视图中列表项目的内部计数器或索引属性?用例可以是简单地枚举项目。或者就我而言,这将是对第一个列表项进行特殊处理。

我正在寻找类似于$counter以下示例中的假设:

  <List items="{MyModel>/MyRootElement}">
    <items>
      <CustomListItem>
        <Text text="This is element number {MyModel>$counter}." />
      </CustomListItem>
    </items>
  </List>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在控制器中使用 JS 来解决这个问题。但我对纯 XML 解决方案感兴趣。

Ser*_*scu 5

据我所知,没有内置的“伪属性”包含元素的索引。如果我们特别考虑排序,那么我想会有开发人员希望编号反映排序,而其他开发人员希望它在排序方面保持稳定。

然而,在某些具体情况下,可以使用纯 XML 解决方案对行进行实际编号。

如果MyRootElement是一个数组,你总是可以做类似的事情(工作小提琴):

<List items="{/MyRootElement}">
    <StandardListItem title="{name}" 
        counter="{= ${/MyRootElement}.indexOf(${}) + 1 }" />
</List> 
Run Code Online (Sandbox Code Playgroud)

如果它是一个对象(即类似地图的结构),那么您将需要使用Object.values()函数。它提供了正确的编号,因为它保证以与 for .. in 循环相同的顺序给出值,模型实际上使用该循环来创建绑定并最终创建列表项。应该注意的是,该Object.values()功能在 IE 中不受支持,可能需要填充。示例(和工作小提琴):

<List items="{/MyRootElement}">
    <StandardListItem title="{name}" 
        counter="{= Object.values(${/MyRootElement}).indexOf(${}) + 1 }" />
</List>
Run Code Online (Sandbox Code Playgroud)

稍后编辑:绑定路径说明

在代码示例中,我使用该${}构造来访问当前未命名模型的绑定上下文的数据对象。

与构建绑定路径相关的规则如下(如文档中指定的):

  • 型号名称后跟一个>符号。如果跳过此部分,则使用未命名(默认)模型。符号之后的路径的其余部分>用于查找模型内的引用数据。
  • 如果路径以 开头/,则它是绝对路径(引用的数据查找是从模型的根对象执行的)。否则,它是相对路径。
  • 相对路径与最近的祖先控件的绑定路径连接,该控件具有模型的绑定上下文。如果生成的路径仍然是相对的,则递归地重复这一过程,直到获得绝对路径。
  • 对于 JSON 模型,路径由符号分割/,然后使用从分割中获得的属性名称遍历 JSON 对象树。

具体来说,在 的情况下${},绑定路径本身是 '' (空字符串)。使用上述规则,这将是未命名(默认)模型的相对路径。由于路径为空,所以不进行属性遍历(因为路径分割后没有得到路径分量)。

同样,对于命名模型,${MyModelName>}表达式绑定将具有相同的效果。