如何将多个 属性 绑定连接成一个

How to concatenate multiple property bindings into one

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

我想在 table 中显示这些内容,其中有一列名为 全名

我正在尝试使用 JSView(它似乎不如 XML 笨拙)。

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

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

但我不知道如何将多个字段绑定/连接到 Text 控件,或者如何将多个 Text 控件放入一个单元格中。

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

这花了我几个小时的搜索和反复试验,但我终于想出了使用格式化程序回调的方法:

    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" 添加到 bootstrap,然后以下内容将起作用:

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

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

XML

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

JS

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

先决条件

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

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

发件人: