如何将ColumnListItem从其他页面控制器添加到MVC中页面内的表

时间:2014-04-03 05:35:09

标签: sapui5

我有一个用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);

它不起作用。请告诉我该怎么做?

1 个答案:

答案 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来发布和订阅事件。既然你已经要求它让我告诉你如何做到这一点:

使用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。就像每次都取决于你的实际架构和数据。

如果这解决了您的问题或者您需要更多信息,请告诉我。