#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 .