SAPUI5 - 如何使用 formElement 进行聚合?

Ada*_*kus 0 sapui5

我之前用 VBox 实现了聚合。这将获得所有“问题”并为每个问题创建一个文本框......

<VBox items="{path: 'view>questions', templateShareable: true}">
    <items>
        <VBox class="sapUiTinyMargin" templateShareable="true">
            <Text text="Question {view>OrderSequence}"/>                                                        
        </VBox>
    </items>
</VBox>
Run Code Online (Sandbox Code Playgroud)

我需要做同样的事情,但对于 formElements。这能做到吗?

<f:formElements>
    <f:FormElement label="{i18n>radioLabel}">
        <f:fields>
            <Input value="{viewmodel>radioLabel}" id="__redioLabel"/>
        </f:fields>
    </f:FormElement>                                    
</f:formElements>
Run Code Online (Sandbox Code Playgroud)

它似乎不适用于“项​​目”

Ser*_*scu 5

在 UI5 中元素有几个特点:

  • 属性:通常是标量属性,如“标题”或“宽度”。
  • 事件:在发生某些事情时触发,例如“按下”或“关闭”。
  • 聚合:子实体的集合,如列表的“项目”。
  • 关联:相关控件,如输入字段的“标签”。

您可以在此处官方文档中找到这些与数据绑定概念的关系。

在您的情况下,“formElements”是FormContainer元素的聚合。基于文档:

聚合绑定可用于根据模型数据自动创建子控件。这可以通过克隆模板控件或使用工厂函数来完成。聚合只能绑定到模型中定义的列表,即绑定到 JSON 模型中的数组或 OData 模型中的集合。

这意味着可以使用任何聚合,无论它如何命名。现在,回到你的例子,“items”不起作用的原因是因为 FormContainer 父元素没有具有该名称的聚合。相反,您必须使用“formElements”聚合。

<f:FormContainer formElements="{viewmodel>/my/path/to/list}">
    <f:formElements>
        <f:FormElement label="{i18n>radioLabel}">
            <f:fields>
                <Input value="{viewmodel>radioLabel}"/>
            </f:fields>
        </f:FormElement>                                    
    </f:formElements>
</f:FormContainer>
Run Code Online (Sandbox Code Playgroud)

另外,请注意,通常您不需要为模板或其任何子项提供 ID(示例中的 Input 具有 ID),这是因为该元素特别不会成为生成的控件树的一部分。它只是用于克隆以根据模型列表创建“真实”元素。

最后,您在第一个示例中的 VBox 上有一个“templateShareable”属性。VBox 没有这样的属性,所以它什么都不做(你实际上在父 VBox 的“项目”的绑定规范中正确使用它)。