Почему элементы управления UI5, отображаемые внутри пользовательского элемента управления, не отображаются повторно при изменении свойства?

#sapui5

#sapui5

Вопрос:

Я создал пользовательский элемент управления my.Control , который отображает sap.m.Text напрямую и получает другой с помощью агрегации.

Вставьте пример в один файл для простоты:

 <html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title>SAPUI5 example</title>
    <script id="sap-ui-bootstrap"
        src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
        data-sap-ui-theme="sap_belize"
        data-sap-ui-libs="sap.m, sap.ui.core"
        data-sap-ui-compatVersion="edge"
            data-sap-ui-async="true">
    </script>
  <script>
        sap.ui.getCore().attachInit(function () {

            sap.ui.core.Control.extend("my.Control", {
                metadata: {
                    aggregations: {
                        testControl: {
                            type: 'sap.m.Text',
                            multiple: false,
                            singularName: 'testControl'
                        }
                    }
                },
                renderer: function (oRm, oControl) {
                
                    oRm.openStart('div', oControl);
                    oRm.openEnd();

                    oRm.text('DIRECTLY GENERATED CONTROL : ');
                    oRm.renderControl(new sap.m.Text('direct-control', {text: 'initial value'}));

                    oRm.openStart('br');
                    oRm.openEnd();

                    oRm.text('AGGREGATION PASSED CONTROL : ');
                    oRm.renderControl(oControl.getTestControl());           

                    oRm.close('div');
                    
                }
            });
            
            new my.Control({
                testControl: [
                    new sap.m.Text('passed-control', {text: 'initial value'})
                ]
            }).placeAt('content');

        });
  </script>
</head>
<body class="sapuiBody" id="content">
</body>
</html>
  

Оба загружаются нормально. Но при редактировании его текстового свойства с помощью Javascript переданный элемент управления обновляется, а другой — нет:

sap.ui.getCore().byId('passed-control').setText('edited value') Управление отображается повторно

sap.ui.getCore().byId('direct-control').setText('edited value') Управление не отображается повторно

Если я выполняю sap.ui.getCore().byId('direct-control').rerender() , то «прямое управление» отображается повторно с «отредактированным значением» в виде текста.

Почему они ведут себя по-разному? Есть ли способ настроить это поведение?

Спасибо.

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

1. testControl агрегируется в вашем пользовательском элементе управления, который устанавливает между ними отношение родитель-потомок. Когда дочернее свойство изменяется, его родительский элемент также становится недействительным. С другой стороны, каждый раз, когда вызывается функция render() direct-control , создается new .