Reputation: 815
I have an OData source that gives result rows that contain first_name
& last_name
.
I want to display these in a table with a column called Full Name.
I'm trying to use a JSView (It seems less kludgy than XML).
I can do a 1:1 binding like this:
var template = new sap.m.ColumnListItem({
// ...,
cells: [
new sap.m.Text({
text: "{first_name}"
})
]
});
But I cannot figure out how to bind / concatenate multiple fields to the Text control, or alternatively how to put multiple Text controls into one cell.
EDIT: This is not the exact same as the other suggested solution because this is for JSView instead of XMLView.
Upvotes: 2
Views: 5912
Reputation: 815
This took me several hours of searching and trial and error, but I finally figured out out to use a formatter callback:
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
must apparently be an array of objects with a path
property. The path value must match the odata source.
These values will then be passed to the formatter
callback as arguments.
EDIT: you can also do simple concatenation with a template, but there is a trick - you must add data-sap-ui-compatVersion="edge"
to your bootstrap and then the following will work:
new sap.m.Text("activity", {
text: "{first_name} {last_name}"
});
Upvotes: 1
Reputation: 2256
You can just use below format to concatenate the two values using simply binding.
<Text text="{first_name} {last_name}" />
new sap.m.Text({
text: "{first_name} {last_name}"
});
In order to enable complex binding syntax (aka CompositeBinding), the following bootstrap setting is required:
<script id="sap-ui-bootstrap" src="https://.../resources/sap-ui-core.js"
data-sap-ui-compatversion="edge"
...
>
From: https://stackoverflow.com/a/41554735/5846045
Upvotes: 5