Как добавить ColumnListItem в таблицу внутри страницы в MVC из другого контроллера страницы
У меня есть приложение SAPUI5, написанное на MVC
У меня есть представление под названием oPage4:
var landscapePage = new sap.m.Page({
title : "Landscape Name",
showNavButton : true,
navButtonPress : [oController.back,oController],
footer : new sap.m.Bar({
id : 'landscapePage_footer',
contentMiddle : [
new sap.m.Button({
}),
new sap.m.Button({
})
]
}),
});
oLandscapePageTable = new sap.m.Table("landscape", {
inset : true,
visible : true,
getIncludeItemInSelection : true,
showNoData : false,
columns : [ new sap.m.Column({
styleClass : "name",
hAlign : "Left",
header : new sap.m.Label({
})
}) ]
});
landscapePage.addContent(oLandscapePageTable);
return landscapePage;
затем внутри контроллера Page1 я хочу добавить элемент columnlist в таблицу на странице 4.
var oPage4 = sap.ui.getCore().byId("p4");
var landscapePageRow = new sap.m.ColumnListItem({
type : "Active",
visible : true,
selected : true,
cells : [ new sap.m.Label({
text : something
}) ]
});
oPage4.getContent().addItem(landscapePageRow);
это не работает подскажите пожалуйста как это сделать?
1 ответ
Хорошо, я думаю, что понял твою проблему сейчас. В целом, я бы не стал вызывать страницу и манипулировать ею с другой стороны. Однако это абсолютно возможно:
Дополнительные функции на ваш взгляд
Вы можете продлить page4
с некоторыми другими функциями, которые можно вызывать извне, например так:
sap.ui.jsview("my.page4", {
createContent : function() {
this.table = ...
...
},
addColumnListItem : function(columnListItem) {
// add it to the table calling this.table ...
}
}
С другой стороны, теперь вы можете вызывать эту функцию следующим образом:
var page4 = sap.ui.jsview("my.page4");
page4.addColumnListItem(page4, columnListItem);
Внимание: page4
Сам объект не указывает на элемент управления, который вы возвращаете, а на сам экземпляр представления. Вы заметите это, если зарегистрируете объект page4 на консоли. Вот почему вы должны добавить функции, как описано.
Некоторые другие подходы заключаются в использовании EventBus, как описано здесь, для публикации и подписки на события. Так как вы просили об этом, позвольте мне показать вам, как вы могли бы сделать это:
Использование EventBus
Основное намерение состоит в том, что можно subscribe
на конкретное событие, и другие могут publish
такие события на eventbus. Позволь мне привести пример:
Подписка на EventBus:
var eventBus = sap.ui.getCore().getEventBus();
eventBus.subscribe("channel1", "event1", this.handleEvent1, this);
Конечно, вы можете назвать свой канал и события, как вы хотите. Третий параметр указывает функцию, которая будет вызываться в случае опубликованных событий. Последний параметр - это область действия, на которую будет указывать эта функция в данной функции.
Ваш handleEvent1
функция может выглядеть так:
handleEvent1 : function(channel, event, data) {
var listItem = data.listItem
}
Публикация событий в EventBus:
var columnListItem = ...
var eventBus = sap.ui.getCore().getEventBus();
eventBus.publish("channel1", "event1",
{
listItem : columnListItem
}
);
Еще один вариант, который у вас есть, - это сделать columnListItems в зависимости от модели. Как и всегда, это зависит от вашей фактической архитектуры и данных.
Дайте мне знать, если это решило вашу проблему или вам нужна дополнительная информация.