2017-01-14 21 views
1

У меня есть вид JS, в котором я создаю sap.m.Table. Это «столбцы» привязаны к JSONModel. Это «элементы» привязаны к ODataModel. Я хочу получить доступ к данным строки и имени столбца, когда я нажимаю на значок, содержащийся в столбце ColumnListItem.Как получить доступ к данным строки и столбца при щелчке значка в столбце ColumnListItem

Посмотреть код:

createContent : function(oController) { 
    var oTable = new sap.m.Table("table1", { 
     width: "auto", 
     noDataText: "Please add rows to be displayed!" 
    }).addStyleClass("sapUiResponsiveMargin"); 

    oTable.bindAggregation("columns", "Periods>/periods", function(sId, oContext) { 
     var sColumnId = oContext.getObject().period; 
      return new sap.m.Column({ 
       hAlign: "Center", 
       vAlign: "Middle", 
       header: new sap.m.Text({ 
        text: sColumnId 
       }) 
      }); 
     }); 

    oTable.bindItems("zStatus>/StatusSet", function(sId, oContext) { 

    var row = new sap.m.ColumnListItem(sId, { 
     type : "Inactive", 
     cells: [ 
      new sap.ui.core.Icon({ 
       src: "sap-icon://delete", 
       hoverColor: "red", 
       activeColor: "red", 
       press: [oController.onDeleteIconPress, oController] 
      }), 
      new sap.m.Text({ 
       text: "{zStatus>Description}" 
      }),          
      new sap.ui.core.Icon(sId, { 
       src: { 
        path: "zStatus>Status1", 
        formatter: function(status) { 
        switch(status) { 
         case "R": 
          return "sap-icon://sys-cancel"; 
         case "G": 
          return "sap-icon://sys-enter"; 
         case "Y": 
          return "sap-icon://notification"; 
         default: 
          return "sap-icon://sys-help"; 
        } 
       } 
      }, 
      size: "1.5em", 
      press: [oController.onStatusIconPress, oController] 
     }) ] 
    }); 


    return oTable; 
} 

В моем контроллере я создаю массив, то JSON модель «Периоды» из него и установить его на эту точку зрения. Модель Odata «zStatus» определена в файле манифеста.

код контроллера:

onInit : function() { 
    // array aPeriods is populated first then 
    var oPeriodsModel = new sap.ui.model.json.JSONModel(); 
    oPeriodsModel.setData({ 
     periods : aPeriods 
    }); 
    this.getView().setModel(oPeriodsModel, "Periods"); 
}, 

onStatusIconPress : function(oEvent) { 
    // I can get the row data on icon press 
    // Problem 2: but how do I get the column name? 
    // I wanted to attach the column name to icon as customData but I could  
    // not access model attached to columns inside bindItems method 
} 

ответ

1

мне удалось решить сам.

Создал массив в createContent. Заполнил его идентификаторами столбцов в bindAggregation столбцов, а затем использовал этот массив в методе bindItems. Затем я могу передать customData для значков.

Вот код -

createContent : function(oController) { 
     var aColumns = []; // array to store column ids 
     var columnIndex = 0; // index to track 
//more code 
// create table oTable 

oTable.bindAggregation("columns", "/columns", function(sId, oContext) { 
      var sColumnId = oContext.getObject().period; 

      if (sColumnId === "DeleteIcon") { 
       // this is always my first column 
       columnIndex = 0; 
       return new sap.m.Column({ 
        hlign : "Begin", 
        vAlign : "Middle", 
        width : "2em", 
        header : new sap.m.Text({ 
         text : "" 
        }) 
       }); 
      } else { 
       // add column ids to array 
       aColumns[columnIndex++] = sColumnId; 

       return new sap.m.Column({ 
        hlign : "Center", 
        vAlign : "Middle", 
        header : new sap.m.Text({ 
         text : sColumnId 
        }) 
       }); 
      } 
     }); 

oTable.bindItems("/rows", function(sId, oContext) { 
    var row = new sap.m.ColumnListItem({ 
     new sap.m.Text({ 
      text: "{Name}" 
     }), 
     new sap.ui.core.Icon(sId, { 
      src: "sap-icon://sys-help" 
      size: "1.5em", 
      press: [oController.onStatusIconPress, oController], 
      customData : [ 
       // use column ids here 
       new sap.ui.core.CustomData({key: "column", value: aColumns[0]}) 
      ] 
     }), 
    }); 

    return row; 
} 

} 
+0

Вы должны опубликовать свое решение. В противном случае это не поможет людям, имеющим тот же или связанный с ним вопрос. – matbtt

+0

Вы правы. Я отправлю код в свой ответ. –