2016-07-28 26 views
0

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 
    }, 

Antwort

0

Wenn Sie Ihre Pop-up aus einem Fragment instanziiert, können Sie angeben "einen Controller für Event-Handler in dem Fragment verwendet werden" (siehe https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.html#.xmlfragment)

Zum Beispiel:

onOpenResponsivePopover : function(oEvent) { 

    if (!this._oResponsivePopover) { 
     // adding 'this' makes sure you specify the current controller to be used for event handlers 
     this._oResponsivePopover = sap.ui.xmlfragment("namespace.to.your.popoverfragment", this); 
     this.getView().addDependent(this._oResponsivePopover); 
    } 

    this._oResponsivePopover.openBy(oEvent.getSource()); 
}, 
+0

Und wenn du kein Fragment verwendest, aber das Popover rein in JS erstellst? – Pieter

+0

Können Sie Ihre Frage mit Code aktualisieren, wie Sie Ihr Popover-Steuerelement instanziieren? – Qualiture

+0

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