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

SAPUI5-如何使用formElement进行聚合?,sapui5,Sapui5,我以前使用VBox实现了聚合。这将获取所有“问题”,并为每个问题创建一个文本框 <VBox items="{path: 'view>questions', templateShareable: true}"> <items> <VBox class="sapUiTinyMargin" templateShareable="true"> <Text text="Question {view>Ord

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

<VBox items="{path: 'view>questions', templateShareable: true}">
    <items>
        <VBox class="sapUiTinyMargin" templateShareable="true">
            <Text text="Question {view>OrderSequence}"/>                                                        
        </VBox>
    </items>
</VBox>

我也需要这样做,但是对于formElements。这能做到吗

<f:formElements>
    <f:FormElement label="{i18n>radioLabel}">
        <f:fields>
            <Input value="{viewmodel>radioLabel}" id="__redioLabel"/>
        </f:fields>
    </f:FormElement>                                    
</f:formElements>


它似乎不适用于UI5中的“项”

元素有几个特点:

  • 属性:通常是标量属性,如“标题”或“宽度”
  • 事件:当某些事情发生时,如“按下”或“关闭”时触发
  • 聚合:子实体的集合,如列表中的“项”
  • 关联:相关控件,如输入字段的“标签”
您可以在中找到这些与数据绑定概念的关系

在您的例子中,“formElements”是元素的聚合。根据文件:

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

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


另外,请注意,通常不需要为模板或其任何子级提供ID(示例中的输入具有ID),这是因为该元素不属于结果控件树的一部分。它只是用于克隆以基于模型列表创建“真实”元素


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

UI5中的元素有几个特征:

  • 属性:通常是标量属性,如“标题”或“宽度”
  • 事件:当某些事情发生时,如“按下”或“关闭”时触发
  • 聚合:子实体的集合,如列表中的“项”
  • 关联:相关控件,如输入字段的“标签”
您可以在中找到这些与数据绑定概念的关系

在您的例子中,“formElements”是元素的聚合。根据文件:

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

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


另外,请注意,通常不需要为模板或其任何子级提供ID(示例中的输入具有ID),这是因为该元素不属于结果控件树的一部分。它只是用于克隆以基于模型列表创建“真实”元素


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

您可以使用VBox,然后将f:formElements放入项中。 或者使用标准列表


FormElements或容器没有聚合项。

您可以使用VBox,然后将f:FormElements放入项中。 或者使用标准列表

FormElements或容器没有聚合项。

解决方案是

表单上的聚合

<f:Form id="formCustomRadio" editable="true" visible="true" formContainers="{viewmodel>answers}">

非常感谢

解决方案是

表单上的聚合

<f:Form id="formCustomRadio" editable="true" visible="true" formContainers="{viewmodel>answers}">


非常感谢

只有当有一个Formelement时,此功能才有效。。。。如果有两个单独的表单元素(例如radioLabel和RadioCore),则只显示第二个表单元素……知道吗?这是因为实际上只能使用一个元素作为“模板”进行聚合绑定时。如果要为集合中的每个项生成两个不同的元素,则必须将其包装到包含元素中。因此,在您的示例中,我看到了两个版本:要么绑定周围表单的formContainers聚合,使FormContainer模板包含两个FormElements;要么使用不同的控件。这仅在有一个Formelement时有效。如果有两个单独的form元素(例如radioLabel和RadioCore),则仅显示第二个form元素。知道吗?这是因为实际上只能使用一个元素作为“模板”进行聚合绑定时。如果要为集合中的每个项生成两个不同的元素,则必须将其包装到包含元素中。因此,在您的示例中,我看到了两个版本:要么绑定周围表单的formContainers聚合,使FormContainer模板包含两个FormElements;要么使用不同的控件。实际上,这是完全错误的。如果您查看API文档,您将看到