Программа форматирования не вызывается, несмотря на прохождение того же пути привязки - PullRequest
1 голос
/ 11 июля 2020

Я не могу осмыслить это. Что я упускаю из виду?

Вот минимальный пример: https://plnkr.co/edit/VjqGeG9JpHblyLBb?preview

<tnt:InfoLabel
 text="{
   path: 'LastName',
   formatter: '.formatter.typeText'
 }" 
 colorScheme="{
   path: 'LastName',
   formatter: '.formatter.typeColor'
 }" />
// formatter.js
sap.ui.define([], function () {
 "use strict";
 return {
   typeText: function(sLastName) {
     // Called with 'sLastName' value
   },
   typeColor: function(sLastName) {
     // Not called
   }
 };
});

Я использую UI5 1.79 с sap.ui.model.odata<strong>.v4</strong>.ODataModel.

1 Ответ

1 голос
/ 14 июля 2020

Добавьте targetType: 'any' к информации привязки свойств, в которой возникла проблема. Например:

<tnt:InfoLabel
  text="{
    path: 'LastName',
    formatter: '.getMyText'
  }"
  colorScheme="{
    path: 'LastName',
    formatter: '.getMyColorScheme'<strong>,</strong>
    <strong>targetType: 'any'</strong>
  }"
/>

С sap.ui.model.odata.v4.ODataModel, типы данных в привязках свойств автоматически определяются в соответствии с типом EDM свойства сущности. Т.е. в приведенном выше случае: даже без определенного type, явно назначенного свойству text, v4.ODataPropertyBinding автоматически выбирает String тип (потому что LastName имеет Type="Edm.String" в $ metadata) и присваивает его type:

<tnt:InfoLabel
  text="{
    path: 'LastName',
    formatter: '.getMyText',
    <em>type: 'sap.ui.model.odata.type.String'</em> &lt-- automatically added by v4.ODataPropertyBinding
  }"

. Это нормально для свойства text, поскольку оно фактически ожидает значение string , но делает то же самое для других свойства, такие как colorScheme, который ожидает значения int , приводит к исключению FormatException. *

Чтобы предотвратить автоматическое c Определение типа , Необходимо добавить targetType: 'any'.

* С commit: 4611772, который доступен с 1.80, мы можем увидеть соответствующее сообщение об ошибке в консоли:

FormatException в свойстве colorScheme из 'Element sap.tnt.InfoLabel # ...': не является допустимым значением int. Подсказка: отдельные свойства, на которые есть ссылки в составных привязках и в выражениях привязки, автоматически преобразуются в тип связанного свойства элемента управления, если не указан другой targetType. targetType: 'any' может избежать преобразования и привести к ожидаемому поведению.

...