Как получить родительский вид / фрагмент из элемента управления

#controls #viewcontroller #sapui5 #sap-fiori

#элементы управления #viewcontroller #sapui5 #sap-fiori

Вопрос:

Как я могу получить, к View / Fragment a sap.ui.core.Control принадлежит?

Крис

Ответ №1:

Вы можете переходить к родителям, пока не найдете представление. Однако вам не следует полагаться на идентификаторы. Используйте класс или метаданные для идентификации представления:

   buttonPress: function(oEvent){
    var b = oEvent.getSource();
    while (b amp;amp; b.getParent) {
      b = b.getParent();
      if (b instanceof sap.ui.core.mvc.View){
        console.log(b.getMetadata()); //you have found the view
        break;
      }
    }
  }
  

Пример на JSBin.

Фрагменты не добавляются в дерево управления. Таким образом, вы не можете их найти. Однако вы можете найти представление, в которое они были добавлены.

Ответ №2:

Если идентификатор вашего элемента управления содержит идентификатор представления (что-то вроде «__xmlview42», если вы используете представления XML), вы можете извлечь его и вызвать:

 sap.ui.getCore().byId("__xmlview42")
  

чтобы получить содержащий вид. Если идентификатор отсутствует, вы можете перемещаться по дереву элементов управления с помощью:

 control.getParent()
  

пока у вас не будет элемента управления, идентификатор которого содержит идентификатор представления. Вы также можете перемещаться по дереву элементов управления, пока не дойдете до представления.

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

Комментарии:

1. хм… Представления все еще могут иметь префикс компонента. К сожалению, элементы управления во фрагментах, похоже, не имеют никакого префикса ни из фрагмента, ни из зависимого представления…