2016-07-28 11 views
0

レスポンスポップアップには、「削除」モードのリストが含まれています。 アイテムを削除するためにクリックすると、プレスで関数が呼び出されます。 'this'はoListであり、oEvent.oSourceはoListです。 イベント関数内から、私のコントローラで関数を呼び出す必要があります。 sap..core..byId( "Detail")やフルネームスペースを使用していなくても、コントローラを参照する方法が見つかりません。 oEvent.oSource.getParent()。getParent()からelemntツリーを歩いてみると、.getController()が呼び出されましたが、それは行き止まりです。あなたがフラグメントからあなたのポップアップをインスタンス化するとき、ユーザーが指定することができますレスポンシブポップアップのイベント機能内からのコントローラからのコール機能

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

答えて

0

例えば

https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.html#.xmlfragmentを参照してください)「コントローラは、フラグメント内のイベントハンドラに使用する」:

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

そして、あなたがフラグメントを使用していないときに、純粋にJSでポップオーバーを作成するときは? – Pieter

+0

ポップオーバーコントロールをインスタンス化するコードを使用して質問を更新できますか? – Qualiture

+0

Pieter、あなたはコントローラの中でポップオーバーを作成していると思いますか?はいの場合は、bind(this)を使うことができます。おそらく、元の投稿のコードを引用する必要があります。 – slkorolev

関連する問題