Как проверить, отображается ли элемент управления UI5? - PullRequest
0 голосов
/ 24 августа 2018

Я открываю всплывающее окно для определенного элемента управления внутри FlexColumnLayout. В зависимости от размера экрана он не будет отображаться после расширения среднего столбца.

Я хотел бы проверить, отображается ли cotrol перед открытием поповера, но я не могу найти свойство, которое позволяет это.

Уже попробовал решения этого поста: Проверить, отображается ли элемент управления и отображается ли он

enter image description here

Если вы хотите проверить код актуального кода, просто воспользуйтесь демонстрационным приложением FlexColumnLayout и попробуйте открыть всплывающее окно на одной из скрытых кнопок при развертывании столбца начала.

Спасибо за вашу помощь, Эрик

Изменить 27.08.18 (рассматриваемый код):

Контроллер:

/**
* Listner. Triggered when help is canceled.
* Closes popover.
* @author WN00096217 (Eric Schuster)
* @memberof xxxxxxxxxxxx
* @function onHelpCancel
*/
onHelpCancel: function () {
    var iHelp = this._oHelpModel.getProperty("/counter");
    this._oHelpModel.setProperty("/counter", 0);
    this._oHelpModel.getProperty("/p" + iHelp).close();
},

/**
 * Listner. Triggered when help is continue.
 * Closes popover, opens next popover.
 * @author WN00096217 (Eric Schuster)
 * @memberof xxxxxxxxxxxxxxxxxxx
 * @function onHelpNext
 */
onHelpNext: function () {
    var iHelp = this._oHelpModel.getProperty("/counter");
    this._oHelpModel.setProperty("/counter", iHelp + 1);
    this._oHelpModel.getProperty("/p" + iHelp).close();
    this._oHelpModel.getProperty("/p" + (iHelp + 1)).openBy(this._oHelpModel.getProperty("/c" + (iHelp + 1)));
},

контроллер (часть innit):

this._oHelpModel.setProperty("/c0", this._oView.byId("xxxxx"));
this._oHelpModel.setProperty("/c1", this._oView.byId("xxxx"));
this._oHelpModel.setProperty("/c2", this._oView.byId("xxxxx"));
this._oHelpModel.setProperty("/c3", this._oView.byId("xxxxxx"));
this._oHelpModel.setProperty("/c4", this._oView.byId("xxxxxx"));
this._oHelpModel.setProperty("/c5", this._oView.byId("xxxxx"));
this._oHelpModel.setProperty("/c6", this._oView.byId("xxxxx"));
this._oHelpModel.setProperty("/c7", this._oView.byId("xxxxxx"));
this._oHelpModel.setProperty("/c8", this._oView.byId("xxxxx"));

Компонент (часть innit):

//p eq popover c eq controll
var oHelpModel = new JSONModel({
    counter: 0,
    p0: null,
    c0: null,
    p1: null,
    c1: null,
    p2: null,
    c2: null,
    p3: null,
    c3: null,
    p4: null,
    c4: null,
    p5: null,
    c5: null,
    p6: null,
    c6: null,
    p7: null,
    c7: null,
    p8: null,
    c8: null
});
this.setModel(oHelpModel, "helpModel");

Как бы я хотел, чтобы контроллер выглядел:

/**
 * Listner. Triggered when help is continue.
 * Closes popover, opens next popover.
 * @author WN00096217 (Eric Schuster)
 * @memberof xxxxxxxxxxxxxxxxx
 * @function onHelpNext
 */
onHelpNext: function () {
    var iHelp = this._oHelpModel.getProperty("/counter");
    if("control is rendered"){
        this._oHelpModel.setProperty("/counter", iHelp + 1);
        this._oHelpModel.getProperty("/p" + iHelp).close();
        this._oHelpModel.getProperty("/p" + (iHelp + 1)).openBy(this._oHelpModel.getProperty("/c" + (iHelp + 1)));
    } else {
        this._oHelpModel.setProperty("/counter", iHelp + 1);
        this.onHelpNext();
        return;
    }
},

1 Ответ

0 голосов
/ 24 августа 2018

использовать событие onAfterRendering элемента управления. в вашем соответствующем представлении controller:

var oControl = this.byId("yourControl");

oControl.addEventDelegate({
    onAfterRendering: function() {

        // your confirmation that the control is rendered

    }
}

ОБНОВЛЕНИЕ после разъяснения оп:

присвоить элементу управления идентификатор, если у него еще нет идентификатора. получить контроль по его идентификатору. проверьте, активен ли элемент управления. в контроллере вашего соответствующего представления:

var oControl = this.byId("yourControl");

oControl.isActive(); // true if the control is visible
...