SapUI5: Control - контрол из контролов

Путевые заметки и набитые шишки…

Не теряйте родителей

Если контрол создается через new то незабудьте указать родителя.

this.button = new Button(
this.setParent(this); // не забудьте указать родителя

Стоит учесть что если добавить контрол в агрегат то родитель изменится, причем некоторые контролы при этом выбросят исключение.

Пробрасываем binding

Часто требуется пробросить биндинг на внутрение контролы. Сделать это переопределением методов _bindProperty и _bindAggregation

_bindProperty: function (sName, oBindingInfo) {
  if (sName === 'value') {
    this.button.bindProperty('text', oBindingInfo);
  }
  
  // не забудте вызвать базовый
  Control.prototype._bindProperty.call(this, sName, oBindingInfo);
},

Выглядит как хак но это используется в самом SapUI5 пример из ListBase

RTL языки

Не стоит забывать что есть языки которые пишутся справа налево. sap.ui.getCore().getConfiguration().getRTL() позволяет получит RTL-ли текущий язык.

  if (!sap.ui.getCore().getConfiguration().getRTL()) {
    oRm.write('<div style="float:right">');
  } else {
    oRm.write('<div style="float:left">');
  }

Еще один не маловажный пункт, не стоит забывать про тег bdi. Он нужен если в RTL текcте есть вставки LTR языка (наприме данные из базы: название городов, имена, фамилии). Каждый браузер производит разворот написания по своему :(

Например: На английском:Template: (Test) Welcome message будет после переключения локали на Arabic القالب: (Test) Welcome message

При этом отобразится это по разному:

  • Chrome: Test) Welcome message (:القالب
  • FireFox: Welcome message (Test) :القالب
comments powered by Disqus