如何将多个属性绑定合并为一个

时间:2019-06-21 17:11:02

标签: sapui5

我有一个OData源,它提供的结果行包含first_namelast_name

我想在名为全名的列的表中显示这些内容。

我正在尝试使用JSView(似乎比XML少一些笨拙)。

我可以像这样进行1:1绑定:

var template = new sap.m.ColumnListItem({
  // ...,
  cells: [
    new sap.m.Text({
      text: "{first_name}"
    })
  ]
});

但是我无法弄清楚如何将多个字段绑定/连接到Text控件,或者如何将多个Text控件放入一个单元格。

编辑:这与其他建议的解决方案并不完全相同,因为这是针对JSView而不是XMLView的。

2 个答案:

答案 0 :(得分:4)

您可以使用以下格式通过简单绑定将两个值连接起来。

XML

<Text text="{first_name} {last_name}" />

JS

new sap.m.Text({
  text: "{first_name}  {last_name}"
});

先决条件

为了启用复杂绑定语法(又名 CompositeBinding ),需要以下引导程序设置:

<script id="sap-ui-bootstrap" src="https://.../resources/sap-ui-core.js"
  data-sap-ui-compatversion="edge"
  ...
>

发件人:https://stackoverflow.com/a/41554735/5846045

答案 1 :(得分:0)

这花了我几个小时的搜索和反复试验,但是我终于弄清楚了要使用格式化程序回调:

    var template = new sap.m.ColumnListItem({
        id: "column_template",
        type: "Navigation",
        visible: true,
        cells: [
            new sap.m.Text("activity", {
                text:  {
                    parts: [
                        {path: "first_name"},
                        {path: "last_name"}
                    ],
                    formatter: function(a,b){
                        return a+" "+b;
                    }
                }
            })
        ]
    });

parts显然必须是具有path属性的对象数组。路径值必须与odata源匹配。

然后,这些值将作为参数传递给formatter回调。

编辑:您还可以使用模板进行简单的串联,但是有一个窍门-您必须将data-sap-ui-compatVersion="edge"添加到引导程序中,然后才能进行以下操作:

new sap.m.Text("activity", {
    text: "{first_name} {last_name}"
});