2016-05-04 4 views
0

私はalredyがすでに1つのプロパティに基づいてフィルタリングされたsap.m.listを持っています。ここでもライブ検索を実装するためにフィルタを適用する必要があります。sap.m.listのフィルタリングされたアイテムをどのように調整するのですか

filterList:function(evt){ 
     debugger; 
     var filters = []; 
     var oFilter=""; 
     var query = evt.oSource.mProperties.value; 
     if (query && query.length > 0) { 
      var filter = new sap.ui.model.Filter("CLTYPE", sap.ui.model.FilterOperator.Contains, query); 
      filters.push(filter); 

      var filter1 = new sap.ui.model.Filter("CLCAT", sap.ui.model.FilterOperator.Contains, query); 
      filters.push(filter1); 
      var filter2 = new sap.ui.model.Filter("CLNUM", sap.ui.model.FilterOperator.Contains, query); 
      filters.push(filter2); 

      oFilter = new sap.ui.model.Filter(filters, false); 
     } 


     // update list binding 
     var list = sap.ui.getCore().byId("List"); 
     var binding = list.getBinding("items"); 
     binding.filter(oFilter); 
    }, 

は、ここに私のリストがすでにlist.getBinding(「アイテム」)は私にすべてのアイテムを与えるない

 obj[filterParam] = context; 

    var contextClauses=_.where(clauses,obj); 
    sap.ui.getCore().getModel('ClauseModel').setProperty("/DATA/CURRENTCLAUSES",contextClauses); 

// update list binding 
var list = sap.ui.getCore().byId("List"); 
var binding = list.getBinding("items"); 
binding.filter(oFilter); 
を次のようにフィルタ処理Items.Iは私sap.m.listのフィルタを適用しているfiltered.here

どのように実装するには?任意の提案ですか?

答えて

0

私はフィルタに

var mainFilter=new sap.ui.model.Filter(parameter,sap.ui.model.FilterOperator.Contains,context); 
     var query =evt.getParameter("newValue"); 
     if (query && query.length > 0)var filter1= new sap.ui.model.Filter("CLNAME",sap.ui.model.FilterOperator.Contains,query); 
      filtersArr1.push(filter1); 
      filtersArr1.push(mainFilter); 
      var filter2 = new sap.ui.model.Filter("CLNUM",sap.ui.model.FilterOperator.Contains, query); 
      filtersArr2.push(filter2); 
      filtersArr2.push(mainFilter);oFilter1 = new sap.ui.model.Filter(filtersArr1,true);oFilter2 = new sap.ui.model.Filter(filtersArr2,true);filterGroup.push(oFilter1,oFilter2);oFilter4 = new sap.ui.model.Filter(filterGroup,false); 
      binding.filter(oFilter4); 

WORKING FINE

0

textfieldlivechangeを追加し、リストをフィルタリングする関数を呼び出します。

new sap.ui.commons.TextField({type:"Text", 
     value:"", 
     liveChange: function(oEvent){ 
     //Now call a function to filter your list.          
     filterList(oEvent,oStorage.get("previousFilteredList")); 
     }}); 
     filterList: function(oEvent,yourObj){ 
        var like = oEvent.getParameter("liveValue"); 
        var oFilter = new sap.ui.model.Filter("name", 
        sap.ui.model.FilterOperator.StartsWith,like); 
        var element = sap.ui.getCore().getElementById("sample"); 
        var listBinding = element.getBinding("items"); 
        listBinding.filter([oFilter]); 
    //Add the filtered object oStorage after every filter to access the previous filtered data 
       //oStorage.put("previousFilteredList","yourobj"); 
     }, 
    //Wherever you filter your data first. 
    oStorage = jQuery.sap.storage("session"); 
    oStorage.put("previousFilteredList","yourobj"); 
+0

を 'と' 条件を使用して、それを解決しましたreply.my問題のおかげでフィルタ関数を呼び出す方法ではありません。私はliを実装しました私のリストはすでにフィルタリングされていて、フィルタリストの行には問題があります。var listBinding = element.getBinding( "items");フィルタリングされていないリスト項目を再度フィルタリングする必要があります。 – Anjali

+0

フィルタリングされたデータを保存するために 'session storage'を試して、必要に応じて使用してください。上記の編集された答えを確認してください。 – SiddP

+0

セッション記憶はそれほど必要ではありません。私はフィルタリングされたlistItemsを取得することができました。私はthem.theにフィルタを適用することができますフィルタリングされたリストitems.likeを取得する方法です。それはリストです。次に、そのリストのフィルタリングされたリスト項目をどのように取得するのか?その質問に答えると、私はそのitems.Iでフィルタを適用することができます私の問題は解決されたフィルタリングリスト項目を取得する方法を知っている。 – Anjali

0

私はあなたが2つのオプションがあると思う:

  1. は元のフィルタして、追加のフィルタを適用します。
  2. 最初にフィルタリングされたリストの新しいインスタンスを作成します。

    // assumes you have declared lists (initialList and newList) 
    // values between <..> should be replaced 
    
    jQuery.each (initialList, function (index, item) { 
        if (item.<someField> == <somevalue>) { 
         // you could add an additional field to the new list item like so: 
         item["<newFieldName"] = <newValue>; 
         if (item.<someOtherField> >= <someOtherValue>) {  
          newList.push(item);  // adds this item to the new array/list 
         } 
         } 
         newListModel.setData(newList);  // assumes newListModel has been created 
         //bind to control 
    
+0

リストにモデルバインドを変更できないので、2番目のオプションは私のために働いています。リストにそのモデルバインドでいくつかの操作を実行する必要があります.1オプションは、私が推測する必要な解決策です。 2番目のフィルターを実装しようとすると、すべてのitems.howを取得する傾向がありますか? – Anjali

+0

なぜ新しいリストを作成するのではなく、上記のようにinitialListをフィルタ処理して、追加のフィルタを適用してみましょう。 – Bernard

+0

フィルターで 'and'条件を使用して問題を解決しました。 – Anjali

0
var listFilter=new sap.ui.model.Filter(parameter,sap.ui.model.FilterOperator.Contains,context); 
    var query =evt.getParameter("newValue"); 
    if (query && query.length > 0) 
     var filter1= new sap.ui.model.Filter({ 
      new sap.ui.model.Filter("CLNAME",sap.ui.model.FilterOperator.Contains,query), 
      new sap.ui.model.Filter("CLNUM",sap.ui.model.FilterOperator.Contains, query)}, and:false), 
      var oFilter = new sap.ui.model.Filter([filter1, listFilter], true) 

      binding.filter(oFilter); 
     }); 
関連する問題