Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

openui5: How to get current JSON model element in RowRepeater

Tags:

sapui5

I'm having trouble getting the current JSON model element which is bound to a RowRepeater element. With tables and lists, I would simply retrieve the current index (or indices) and based on these values, I point to the matching element in my JSON model.

However, the RowRepeater element does not have a current index property. As I feel I should be able to retrieve the current element directly, as opposed to indirectly by the current index, is there a better, uniform way to retrieve the current element?

Sample code for model :

    var mydata = {
        "data": [
            {
                "key": "67b895bf-8d89-11e3-94a7-0000005341de",
                "name": "my 1st item"
            },
            {
                "key": "7780de05-8d83-11e3-bec4-0000005341de",
                "name": "my 2nd item"
            }
        ]
    };
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData(dummydata);
    sap.ui.getCore().setModel(oModel);

Sample code for RowRepeater (I want to retrieve the current 'key' upon pressing the delete icon):

    var oRowRepeater = new sap.ui.commons.RowRepeater();

    //create the template control that will be repeated and will display the data
    var oRowTemplate = new sap.ui.commons.layout.MatrixLayout();

    var  matrixRow, matrixCell, control;

    // main row
    matrixRow = new sap.ui.commons.layout.MatrixLayoutRow();

    //Text
    control = new sap.ui.commons.TextView();
    control.bindProperty("text","name");

    //add content to cell, cell to row
    matrixCell = new sap.ui.commons.layout.MatrixLayoutCell();
    matrixCell.addContent(control);
    matrixRow.addCell(matrixCell);

    //delete icon
    var icon = new sap.ui.core.Icon({
        src: sap.ui.core.IconPool.getIconURI("delete"),
        size: "16px",
        color: "#333",
        activeColor: "#BBB",
        hoverColor: "#888",
        width: "60px",
    });
    icon.attachPress(function(oEvent) {
        sap.ui.commons.MessageBox.alert("TODO: Implement delete based on current/data/?/key");
    });

    //add content to cell, cell to row
    matrixCell = new sap.ui.commons.layout.MatrixLayoutCell({ hAlign : sap.ui.commons.layout.HAlign.Right });
    matrixCell.addContent(icon);
    matrixRow.addCell(matrixCell);

    // add row to matrix
    oRowTemplate.addRow(matrixRow);

    //attach data to the RowRepeater
    oRowRepeater.bindRows("/data", oRowTemplate);
like image 675
Qualiture Avatar asked Dec 26 '22 13:12

Qualiture


1 Answers

the following works for me

icon.attachPress(function(oEvent) {
    sap.ui.commons.MessageBox.alert(this.getBindingContext().getProperty('name'));
});

the selected object

var seletedRow = this.getBindingContext().getObject()
like image 133
Jasper_07 Avatar answered Apr 29 '23 20:04

Jasper_07