2016-10-26 3 views
0

SAP標準のFiori Appを拡張しています。それらにはsap.m.ViewSettingsDialogを作成するための1つの方法があります。今度は私自身のsap.m.ViewSettingsItemに、sap.m.ViewSettingsFilterItemが含まれています。イベントリスナーを取得/変更/削除する方法

今度は、イベントのconfirmでリスナーを変更/置換/削除する必要があります。これは、バインドされたODataModelの値をSAPと同じ方法でCusomObjectに保存できないためです。

私の試みは、確認方法を強化することでした。私はSCN、StackoverflowおよびSAPUI5 APIを検索してeventhndlersのゲッターを取得しましたが、何も見つかりませんでした。どうすればそのオブジェクトを取得できますか?その下に私の問題をさらに理解するために

彼らの確認方法:

   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

私はattachEventまたはattachEventOnceを使用することをお勧めしadditioと呼ばれる関数を追加するconfirmイベントでナリー:oDialogViewSettingsDialogある

oDialog.attachEventOnce("confirm", fnAfterConfirm); 

APIガイドsap.ui.base.EventProviderを参照してください。

+0

確認メソッドが例外をスローするため、機能しません。それは私のオブジェクトを処理することはできません。 – inetphantom

+0

「sap.m.ViewSettingsItem」のドキュメントを参照してください。特定の値が変更されたときにイベント "itemPropertyChanged"を追加する可能性があります。これにより、フィルタリングされた項目が標準コードに達する前にその項目を操作できるようになります。 –

関連する問題