I have a fragment / view written in XML which contains a simple table with some columns and one ColumnListItem:
Try with this code below
onAddButton: function(oEvent){
var columnListItemNewLine = new sap.m.ColumnListItem({
cells:[
new sap.m.Text({text: "1"}),
new sap.m.TextArea({value: "senf", rows: "6", width:
"30%"}),
new sap.m.Input({type: "text", placeholder: "bla"}),
new sap.m.Input({type: "text", placeholder: "bla2"}),
new sap.m.DatePicker({placeholder: "bla3"}),
new sap.m.Datepicker({placeholder: "bla4"})
]
});
this._oTable.removeAllItems();
this._oTable.addItem(columnListItemNewLine);
}
<items>
aggregation of table.Thanks to the aggregation binding, UI5 will create a new ColumnListItem for you and you did not break the MVC pattern. Here are some examples, using..:
v2.ODataModel
submitChanges
to send it to backend.v4.ODataModel
JSONModel
sap.ui.getCore().attachInit(() => sap.ui.require([
"sap/ui/core/mvc/XMLView",
"sap/ui/model/json/JSONModel",
], (XMLView, JSONModel) => XMLView.create({
definition: `<mvc:View
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
height="100%"
displayBlock="true"
>
<Table sticky="ColumnHeaders" items="{/}">
<headerToolbar>
<OverflowToolbar>
<Title text="My Items ({= %{/}.length})"/>
<ToolbarSpacer/>
<Button
icon="sap-icon://add"
press="onAddItemPress"
/>
</OverflowToolbar>
</headerToolbar>
<columns>
<Column>
<Text text="Column 1" />
</Column>
<Column>
<Text text="Column 2" />
</Column>
</columns>
<ColumnListItem>
<Text text="{col1}" />
<Text text="{col2}" />
</ColumnListItem>
</Table>
</mvc:View>`,
models: new JSONModel([]),
}).then(view => view.placeAt("content"))));
function onAddItemPress(event) {
const model = event.getSource().getModel();
model.setProperty("/", model.getProperty("/").concat({
col1: "newFoo",
col2: "newBar",
}));
}
<script id="sap-ui-bootstrap"
src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.ui.core, sap.m"
data-sap-ui-preload="async"
data-sap-ui-async="true"
data-sap-ui-theme="sap_belize"
data-sap-ui-compatversion="edge"
data-sap-ui-xx-waitfortheme="true"
data-sap-ui-xx-xml-processing="sequential"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact"></body>
For client-side models such as JSONModel, calling setProperty is sufficient. DO NOT use push or modify the internal model data manually.