SAPUI5无法访问数组并将其提供给JSONModel

问题描述 投票:0回答:3

我在访问数组时遇到问题,在数组中我从omodel读取了一些数据。该数组称为aData,并且包含表的行数据。一切正常,所有数据都在其中。

所有这些代码都是在打开值帮助对话框之后完成的,我想在他/这个表中放置数据

        var oTestModel = this.getModel();
        oTestModel.read("/shrhelpSet", {
            filters: [oFilterObject, oFilterField, oFilterLang],
            success: function(oRetrieveResults){
                //console.log(oRetrieveResults);

                var oDatas2 = oRetrieveResults;
                var test1 = oDatas2.results;

                var aData = [];
                var index = oDatas2.results.length;
                var i;
                for (i=0; i<index; i++) {       

                    aData.push("{Key: '" + oDatas2.results[i].key + "', Value: '" + oDatas2.results[i].value + "'}");
                }

                // aData Array  
                console.log("aData: " + aData);

            },

            error: function(oError){
                console.log(oError);
            }
        });

此代码在omodel读取之后。在这里,我有一个表包含列数据的数组。oModel2包含columndata,我在aColumnData中定义并且上面的行在aData中。这就是问题所在。它不返回(数组)任何数据或仅显示对象。您是否准备好小费以更好地处理此问题或解决此问题?

        var aColumnData = [{
            columnId: "Key"
        }, {
            columnId: "Value"
        }];

        var oModel2 = new sap.ui.model.json.JSONModel();

        oModel2.setData({
            columns: aColumnData,
            rows: aData // THIS IS THE RESULT OF MY MODEL, the results are in aData but i cant access it here
        });

        oTable.setModel(oModel2);

        oTable.bindColumns("/columns", function(index, context) {
            var sColumnId = context.getObject().columnId;
            return new sap.ui.table.Column({
                id : sColumnId,
                label: sColumnId,
                template: sColumnId
            });
        });
        oTable.bindRows("/rows");
javascript data-binding sapui5 sap-fiori
3个回答
0
投票

您的观点没有问题。

var oTable = new sap.ui.table.Table({
  rows: '{/rows}',
  title: new sap.m.Title({
    text: "Test"
  })
});

oTable.bindColumns("/columns", function(index, context) {
  var sColumnId = context.getObject().columnId;
  return new sap.ui.table.Column({
    label: sColumnId,
    template: sColumnId
  });
});

var model = new sap.ui.model.json.JSONModel({
  columns: [{
    columnId: "Key"
  }, {
    columnId: "Value"
  }],
  rows: [
    { Key: "K1", Value: "V1" },
    { Key: "K2", Value: "V2" },
  ] 
});

oTable.setModel(model);
oTable.placeAt('content');
<!DOCTYPE HTML>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
    <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" 
            id="sap-ui-bootstrap"
            data-sap-ui-libs="sap.ui.commons,sap.ui.table,sap.m" 
            data-sap-ui-xx-bindingSyntax="complex"
            data-sap-ui-theme="sap_belize"></script>	
  </head>
  <body id="content" class="sapUiBody sapUiSizeCompact">
  </body>
</html>

因此看来您的模型不正确。也许您正在尝试像这样更改模型中的结果。

success: function(oRetrieveResults){
    var aData = oRetrieveResults.results.map(function(data) {
        return {
            Key: '"' + data.key + '"',
            Value: '"' + data.value + '"'
        };
    });
    this.setProperty("/results", oData);
},

0
投票

我认为问题可能是您正在推送字符串而不是数组中的对象:

aData.push("{Key: '" + oDatas2.results[i].key + "', Value: '" + oDatas2.results[i].value + "'}");

您的对象应该是这样的:

{
   Key: oDatas2.results[i].key,
   Value: oDatas2.results[i].value
}

0
投票

尝试像这样将需要访问接收到的数据的代码移到成功处理程序中。另外,我认为另一个答案是正确的,您需要创建对象而不是字符串。

this.getModel().read("/shrhelpSet", {
filters: [oFilterObject, oFilterField, oFilterLang],
success: function (oRetrieveResults) {
    var aData = oRetrieveResults.results.map(function (oResult) {
        return {
            Key: oResult.key,
            Value: oResult.value
        };
    });

    var aColumnData = [{
        columnId: "Key"
    }, {
        columnId: "Value"
    }];

    var oModel = new sap.ui.model.json.JSONModel({
        columns: aColumnData,
        rows: aData
    });

    oTable.setModel(oModel);

    oTable.bindColumns("/columns", function (index, context) {
        var sColumnId = context.getObject().columnId;
        return new sap.ui.table.Column({
            id: sColumnId,
            label: sColumnId,
            template: sColumnId
        });
    });

    oTable.bindRows("/rows");
}.bind(this),

error: function (oError) {
    console.log(oError);
}
});
© www.soinside.com 2019 - 2024. All rights reserved.