有没有办法在迭代 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 解决方案感兴趣。
据我所知,没有内置的“伪属性”包含元素的索引。如果我们特别考虑排序,那么我想会有开发人员希望编号反映排序,而其他开发人员希望它在排序方面保持稳定。
然而,在某些具体情况下,可以使用纯 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 对象树。具体来说,在 的情况下${},绑定路径本身是 '' (空字符串)。使用上述规则,这将是未命名(默认)模型的相对路径。由于路径为空,所以不进行属性遍历(因为路径分割后没有得到路径分量)。
同样,对于命名模型,${MyModelName>}表达式绑定将具有相同的效果。