2016-10-26 66 views
0

我正在擴展SAP標準Fiori應用程序。他們有一種創建sap.m.ViewSettingsDialog的方法。現在我加入我自己的sap.m.ViewSettingsItem,其中包含一些sap.m.ViewSettingsFilterItem如何獲取和修改/替換/刪除事件偵聽器

現在我想修改/替換/刪除事件confirm上的監聽器,因爲我無法像SAP那樣將綁定的ODataModel中的值保存到CusomObject中。

我的嘗試是增強他們的確認方法。我搜索了SCN,Stackoverflow和SAPUI5 API以獲取eventhndlers的getter,但我沒有找到任何東西。那麼我怎麼能得到那個對象呢?

對於我的問題的進一步瞭解它的下面:

他們的確認方法:

   confirm: function (oEvent) { 
      //reset the buffered filter arrays 
      self.filterValueArray.length = 0;    
      var p = oEvent.getParameters(), 
       aFilters, 
       oCallback; 

      for (var i = 0 ; i < p.filterItems.length; i++) { 
       if (p.filterItems[i] instanceof sap.m.ViewSettingsCustomItem) { // custom control filter 
        oCallback = p.filterItems[i].getCustomData()[0].getValue(); 
        aFilters = oCallback.apply(this, [p.filterItems[i].getCustomControl()]); 
        if (aFilters) { 
         // the filter could be an array of filters or a single filter so we transform it to an array 
         if (!Array.isArray(aFilters)) { 
          aFilters = [aFilters]; 
         } 
         self.filterValueArray = self. filterValueArray.concat(aFilters); 
        } 
       } else if (p.filterItems[i] instanceof sap.m.ViewSettingsItem) { // standard filter 
        aFilters = p.filterItems[i].getCustomData()[0].getValue(); 
        if (aFilters) { 
         // the filter could be an array of filters or a single filter so we transform it to an array 
         if (!Array.isArray(aFilters)) { 
          aFilters = [aFilters]; 
         } 
         self.filterValueArray = self.filterValueArray.concat(aFilters); 
        } 
       } 
      } 

      // apply filters to the table binding 
      self._updateList(self.getList().getBinding("items")); 

      // update info toolbar 
      self.getView().byId("infoBarToolbar").setVisible((self.filterValueArray.length > 0) ? true: false); 
      self.getView().byId("infoBarFilter").setText((self.filterValueArray.length > 0) ? p.filterString: ""); 

      // save expiry filter state for the "cancel" action 
      self._setExpiryFilterState();      
     } 

我添加的過濾器

var oBindingInfo = { 
      path: "/PathToTheKeyValuePairs", 
      template: new sap.m.ViewSettingsItem({ 
       key: "{Key}", 
       text: "{Value}", 
       customData: new sap.ui.core.CustomData({ 
        key: "callback", 
        value: function(oControl) { 
         debugger; //getting the data and creating filter here 
        } 

       //That would be the SAP Solution Sap does with hardcoded Filter 

        // key: "filter", 
        // value: new sap.ui.model.Filter("TargetAttribute", sap.ui.model.FilterOperator.EQ, "{Key}") //fixme It takes the string and no binding info 
       }) 
      }) 
     }; 

     var oMyCustomFilter = new sap.m.ViewSettingsFilterItem({ 
      key: "myCustomFilter", 
      text: self.resourceBundle.getText("myFilterName"), 
     }); 


     oMyCustomFilter.bindAggregation("items", oBindingInfo); 
     this.filterDialog.addFilterItem(oMyCustomFilter); 
+0

我做了一些壞事。我剛剛覆蓋了Eventprovider上的確認。 (私人屬性)。我仍然在尋找一個合適的解決方案。 – inetphantom

回答

1

我會使用attachEventattachEventOnce建議添加一個被稱爲additio的函數應受的confirm事件:

oDialog.attachEventOnce("confirm", fnAfterConfirm); 

其中oDialogViewSettingsDialog

請參閱sap.ui.base.EventProvider的API指南。

+0

不起作用,因爲confirm方法拋出異常。它不能處理我的對象。 – inetphantom

+0

也許你可以查看關於「sap.m.ViewSettingsItem」的文檔。當特定值發生變化時,可以添加事件「itemPropertyChanged」。這可能允許您在達到標準代碼之前操作已過濾的項目集。 –