2016-05-04 10 views
0

Ich habe bereits eine sap.m.list, die bereits auf einer Eigenschaft gefiltert ist. Jetzt muss ich wieder Filter für diese Liste anwenden, um Live-Suche zu implementieren.Wie man die gefilterten Elemente in sap.m.list filtert

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

hier meine Liste ist filtered.here bereits list.getBinding (‚Artikel‘) gibt mir alle Einzelteile nicht das gefilterte Items.I angewendet Filter für meine sap.m.list wie folgt

 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); 

wie implementiert das ?? irgendwelche Vorschläge?

Antwort

0

Ich löste es das 'und' Zustand in Filter

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); 

adaequat

0

Fügen Sie livechange zu Ihrem textfield hinzu und rufen Sie eine Funktion auf, um Ihre Liste zu filtern.

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

mit danke für das reply.my Problem ist nicht, wie man die Filterfunktion nennt. Ich realisierte li Das Problem ist, meine Liste wurde bereits gefiltert und die Zeile in der Filterliste var listBinding = element.getBinding ("items"); geben Sie mir die ganze Liste Elemente nicht gefiltert.Ich möchte die gefilterten Listenelemente wieder aplly Filter – Anjali

+0

versuchen 'Sitzungsspeicher', um Ihre gefilterten Daten zu speichern und sie nach Ihrem Bedarf überall zu verwenden. Überprüfen Sie die bearbeitete Antwort oben. – SiddP

+0

Sitzungsspeicher ist nicht so erforderlich.wenn ich die filteredlistItems abrufen konnte, kann ich Filter auf sie anwenden. Die Sache ist, wie man die gefilterten Listenelemente repliziert. Wie hast du deine Elementvariable r8? Das ist eine Liste. Wie werden Sie dann die filterten Listenelemente dieser Liste abrufen? Wenn dieses Frage beantwortet wird, wird mein Problem gelöst, weil ich Filter auf diesen Einzelteilen anwenden kann. Ich weiß nicht, wie man die gefilterten listitems zurückholt. – Anjali

0

Ich glaube, Sie haben 2 Möglichkeiten:

  1. den ursprünglichen Filter anwenden und dann die zusätzlichen Filter.
  2. Machen Sie eine neue Instanz der ursprünglich gefilterten Liste:

    // 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. Option funktioniert nicht für mich, da ich die Modellbindung an die Liste nicht ändern konnte, da ich mehrere Operationen mit diesem Modell an die Liste binden muss. Die erste Option ist die erforderliche Lösung, denke ich. Aber wie implementiert man das? wenn ich versuche, den 2. Filter zu implementieren, neige ich dazu, alle Einzelteile zu bekommen. wie man das macht? – Anjali

+0

Warum filtern Sie die initialList nicht wie oben beschrieben (statt eine neue Liste zu erstellen) und wenden Sie dann Ihre zusätzlichen Filter an. – Bernard

+0

Ich habe das Problem mit 'und' Bedingung im Filter gelöst. – 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); 
     }); 
Verwandte Themen