Ich habe ein Responsive Popup mit einer Liste im Modus 'Löschen'. Wenn ich klicke, um ein Element zu löschen, wird eine Funktion aufgerufen. Mit dieser Funktion ist "this" die oList und oEvent.oSource ist auch die oList. Von innerhalb der Event-Funktion muss ich eine Funktion in meinem Controller aufrufen. Ich kann keine Möglichkeit finden, meinen Controller zu referenzieren, nicht einmal sap..core..byId ("Detail") oder sogar den gesamten Namespace. Ich habe versucht, den Elementbaum von oEvent.oSource.getParent(). GetParent() zu gehen, um dann .getController() aufzurufen, aber es ist eine Sackgasse.Funktion von der Steuerung aus innerhalb der Ereignisfunktion eines ResponsivePopup aufrufen
handlePressViewSelection: function(oEvent) {
var oResourceBundle = this.getResourceBundle();
//create the list
var oList = new sap.m.List({
mode: "Delete",
delete: this.handleDeleteSelectionItem
});
oList.setModel(this._oSelectedTrainingsModel);
var oItemTemplate = new sap.m.StandardListItem({
title : "{Title}",
description : "{=${Begda} ? ${Type} - { path: 'Begda', type: 'sap.ui.model.type.Date', formatOptions: { style: 'medium' }} : ${Type}}",
icon : "{icon}",
iconInset : false
});
oList.bindAggregation("items", {
path: "/",
template: oItemTemplate,
type: "Active"
});
var oBeginButton = new sap.m.Button({
text: "Action1",
type: sap.m.ButtonType.Reject,
press: function(){
oResponsivePopover.setShowCloseButton(false);
}
});
var oEndButton = new sap.m.Button({
text: "Action2",
type: sap.m.ButtonType.Accept,
press: function(){
oResponsivePopover.setShowCloseButton(true);
}
});
var oResponsivePopover = new sap.m.ResponsivePopover({
placement: sap.m.PlacementType.Bottom,
title: "",
showHeader: false,
beginButton: oBeginButton,
endButton: oEndButton,
horizontalScrolling: false,
content: [
oList
]
});
oResponsivePopover.openBy(oEvent.oSource);
},
handleDeleteSelectionItem: function(oEvent) {
var oListItem = oEvent.getParameter('listItem');
var oList = oListItem.getParent();
var path = oListItem.getBindingContext().sPath;
oList.getModel().getData().splice(parseInt(path.substring(1)), 1);
oList.removeItem(oEvent.getParameter('listItem'));
oList.getParent().getParent().getController()._updateViewSelectionButtonText(); //--> BROKEN
},
Und wenn du kein Fragment verwendest, aber das Popover rein in JS erstellst? – Pieter
Können Sie Ihre Frage mit Code aktualisieren, wie Sie Ihr Popover-Steuerelement instanziieren? – Qualiture
Pieter, ich nehme an, Sie erstellen das Popover im Controller? Wenn ja, können Sie bind (this) verwenden, glaube ich. Wahrscheinlich sollten Sie Ihren Code im Originalbeitrag zitieren. – slkorolev