我有一个用MVC编写的SAPUI5应用程序
我有一个名为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控制器中我想将columnlistitem添加到第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);
它不起作用。请告诉我该怎么做?
答案 0 :(得分:4)
好的,我想我现在明白了你的问题。一般来说,我会避免调用页面并从另一个视图对它进行操作。但是,这绝对是可能的:
您可以使用更多可以从外部调用的函数扩展您的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对象记录到控制台,您会注意到这一点。这就是你必须添加所描述的功能的原因。
其他一些方法是使用像here所述的EventBus来发布和订阅事件。既然你已经要求它让我告诉你如何做到这一点:
主要意图是,可以subscribe
对特定事件{和1}可以publish
事件总线的此类事件。让我举个例子:
订阅EventBus:
var eventBus = sap.ui.getCore().getEventBus();
eventBus.subscribe("channel1", "event1", this.handleEvent1, this);
当然,您可以根据需要为频道和活动命名。第三个参数表示将在已发布事件的情况下调用的函数。最后一个参数是“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。就像每次都取决于你的实际架构和数据。
如果这解决了您的问题或者您需要更多信息,请告诉我。