Как добавить 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 в зависимости от модели. Как и всегда, это зависит от вашей фактической архитектуры и данных.

Дайте мне знать, если это решило вашу проблему или вам нужна дополнительная информация.

Другие вопросы по тегам