Значение параметра форматера SAPUI5 всегда равно нулю - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь добавить значок в столбец таблицы.Значок должен быть выбран в зависимости от значения.Поэтому я реализовал некоторую функцию форматирования, которая основана на файле model/formatter.js.

Вот код, который я пытаюсь добавить в столбец таблицы:

new sap.ui.layout.VerticalLayout({
content: [
    new sap.m.Label({text:"{Items>Status}"}),
    new sap.ui.core.Icon({
        src: {
            parts: [
                "Items>Status"
            ],
            formatter: Formatter.formatStatusIcon
        }, 
        size: "1rem",
        color: {
            parts: [
                "Items>Status"
            ],
            formatter: Formatter.formatStatusIconColor
        }
    })
]
})

На этикетке отображается правильное значение.Значок не отображается.Функция форматирования имеет в качестве входного значения всегда null, даже если значения существуют и не являются нулевыми.Я использую SAPUI5 версии 1.61.2.Я уже пробовал разные синтаксисы свойства parts, но ни один из них не работал.Я также попытался добавить некоторое статическое значение вместо "Items>Status" для целей тестирования, но вход в функцию форматирования по-прежнему null.

У кого-нибудь есть идея, почему ввод функции форматирования всегда равен нулю?

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Исходя из вашего ввода, я понял, что у вас есть представление JS, и вы меняете значок и его цвет в зависимости от состояния

View.js

var oTable = new sap.m.Table("idPrdList", {   
    headerText : "List of Products",
    headerDesign : sap.m.ListHeaderDesign.Standard, 
    mode : sap.m.ListMode.None,   
    includeItemInSelection : false,   
});

var col1 = new sap.m.Column({header: new sap.m.Label({text:"Product Name"})});
oTable.addColumn(col1); 

var col2 = new sap.m.Column({header: new sap.m.Label({text:"Description"})});
oTable.addColumn(col2); 

var col3 = new sap.m.Column({header: new sap.m.Label({text:"Price"})});
oTable.addColumn(col3);

controller.js

var oModel = new sap.ui.model.json.JSONModel();
oModel.setData({
  'items': [
  {
    'ProductID': "sdf",
    'ProductName': "asdf",
    "Status": "1"
  },
  {
    'ProductID': "ss",
    'ProductName': "asf",
    "Status": "1"
  },
  {
    'ProductID': "fff",
    'ProductName': "asdf",
    "Status": "2"
  },
  {
    'ProductID': "fas",
    'ProductName': "asdf",
    "Status": "1"
  },
  {
    'ProductID': "asdfa",
    'ProductName': "asdfwer",
    "Status": "2"
  }]
});
sap.ui.getCore().setModel(oModel, "tableData");
var oTable = sap.ui.getCore().byId("idPrdList");
var colItems = new sap.m.ColumnListItem("colItems", {
  type: "Active"
});
var txtNAME = new sap.m.Text({
  text: "{tableData>ProductID}"
});
colItems.addCell(txtNAME);
var txtNAME2 = new sap.m.Text({
  text: "{tableData>ProductName}"
});
colItems.addCell(txtNAME2);
var txtNAME3 = new sap.ui.layout.VerticalLayout({
  content: [
    new sap.m.Label({
      text: "{tableData>Status}"
    }),
    new sap.ui.core.Icon({
      src: {
        parts: ["tableData>Status"],
        formatter: assets.util.mFormatter.formatStatusIcon
      },
      size: "1rem",
      color: {
        parts: ["tableData>Status"],
        formatter: assets.util.mFormatter.formatStatusIconColor
      }
    })
  ]
})
colItems.addCell(txtNAME3);
oTable.bindAggregation("items", "tableData>/items", colItems);
oTable.setModel(oModel, "tableData");

Formatter.js

jQuery.sap.declare("assets.util.mFormatter");
assets.util.mFormatter = {
    formatStatusIcon: function(Status) {
        return (Status === "2" ? "ICONPath1" : "ICONPath2");
    },
    formatStatusIconColor: function(Status) {
        return (Status === "2" ? "Color1" : "Color2");
    },
};

Вывод

enter image description here

1 голос
/ 19 марта 2019

Ваш синтаксис неправильный, я думаю. Удалите эти детали.

Попробуйте это:

src="{path: 'invoice>Status',
      formatter: '.Formatter.statusText'}
0 голосов
/ 19 марта 2019

Попробуйте следующий синтаксис:

new sap.ui.layout.VerticalLayout({
content: [
    new sap.m.Label({text:"{Items>Status}"}),
    new sap.ui.core.Icon({
        src: {
            parts: [
{path: 'Items>Status'}

            ],
            formatter: '.Formatter.formatStatusIcon'
        }, 
        size: "1rem",
        color: {
            parts: [
                "Items>Status"
            ],
            formatter: Formatter.formatStatusIconColor
        }
    })
]
})
...