2016-08-30 2 views
0

Я разрабатываю приложение SAPUI5, которое содержит пользовательские настройки и возможности пользователя перемещать экран вокруг. Предположим, что экран представляет собой макет динамического бокового содержимого sap.ui.layout.DynamicSideContent с возможностью, чтобы пользователь разместил его слева или справа. У пользователя также есть возможность закрыть/открыть боковой контент на основе их использования.Вызов событий на элементах управления SAPUI5

Для облегчения этого есть кнопка (см. Снимок ниже), которая дает пользователю ощущение отрыва на экране. Кнопка имеет абсолютное положение, поэтому его ширина рассчитывается на основе окна браузера и размера и положения бокового содержимого. Чтобы вычислить первый раз, когда экран отображается, я использовал `window.load event.

enter image description here enter image description here Но это не ведет себя должным образом во всех сценариях. Как я могу вызвать событие renderComplete на макете (если на то пошло, на любом sap.ui.core.Control). Я попытался использовать следующий код, но ни одно из событий не было вызвано.

controlName.addEventDelegate({ 
       onBeforeShow: function() { 
        console.log("on Before Show"); 
       }, 
       onAfterShow: function() { 
        console.log("on After Show") 
       } 
      }) 

Я не могу использовать onAfterRendering в целях, так как он вызывается до загрузки страницы со всеми зависимыми ресурсами и функция $.load() не работает, как хорошо.

Что может быть лучшим подходом для такого сценария?

Заранее спасибо

Edit: Добавление моего кода.

onAfterRendering: function(){ 
     var dynamicContainer= this.getView().byId("idKPIWORDynamicSideContent"); 
      dynamicContainer.addDelegate({ 
       onAfterRendering: function(){ 
        alert("After Rendering"); 
       } 
      }); 
} 

ответ

1

Вы можете использовать onAfterRendering Метод управления как показано ниже:

Для например, sap.m.ComboBox управление,

oComboBox.onAfterRendering = function(){ 
    if (sap.m.ComboBox.prototype.onAfterRendering){ 
     sap.m.ComboBox.prototype.onAfterRendering.apply(this); 
    } 
    // your stuff 
} 
1

У меня был случай, который может быть похож с технической точки зрения. Мне пришлось раскрашивать ячейки таблицы после привязки данных на основе значения ячейки. Это решило мою проблему. Здесь «это» является контроллером. Поэтому я бы предложил поместить следующий код в onAfterRendering() вашего контроллера.

control.addDelegate({ 
    onAfterRendering: $.proxy(this.functionToExecute, control) 
}); 
+0

Hi Shidai, я пробовал делать это внутри onAfterRendering of the View, но это, похоже, вообще не вызывает функцию. Пример в вопросе выше – Deepak

+0

Поместите его в onAfterRendering вашего контроллера. «это» будет вашим контроллером, где вам нужно добавить новую функцию functionToExecute. «control» в этом случае что-то вроде this.getView(). byid ('controlId') – Shidai

Смежные вопросы