SAPUI5 - 如何与formElement聚合?

时间:2017-11-08 16:14:11

标签: sapui5

我之前使用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>

似乎没有使用&#39;项目&#39;

3 个答案:

答案 0 :(得分:4)

在UI5中,元素有几个特征:

  • 属性:通常为标量属性,如“title”或“width”。
  • 事件:当事情发生时被触发,例如“按”或“关闭”。
  • 聚合:子实体的集合,例如列表的“项目”。
  • 关联:相关控件,如输入字段的“标签”。

您可以在official documentation here中找到这些与数据绑定概念的关系。

在您的情况下,“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>

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

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

答案 1 :(得分:0)

解决方案是......

表格上的汇总......

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

非常感谢

答案 2 :(得分:-2)

您可以使用VBox然后将f:formElements放在项目中。 或者使用标准清单。

FormElements或容器没有聚合项目。