2013-03-26 3 views
9

Umwelt:Kendo Datasource: Wie Filter setzen, bevor holen, ohne zwei httprequests Senden

  • Kendo Version: 2013.1.319
  • Datenquelle:

    productsDataSource = new kendo.data.DataSource({ 
        type: "odata", 
        transport: { 
         read: "http://www.mydomain.com/odata.svc/products", 
         dataType: "json", 
         contentType: "application/json" 
        } 
        schema: { 
         type: "json", 
         data: function(data){ 
          return data.value; 
         }, 
         total: function(data){ 
          return data['odata.count']; 
         }, 
         model: product 
        }, 
        pageSize: 50, 
        serverPaging: true, 
        serverFiltering: true, 
        serverSorting: true 
    }); 
    
  • Get Daten:

    productsDataSource.filter ([{Feld: "Id", Operator: "eq", Wert: 5}]); // dies eine Httprequest

    productsDataSource.fetch (function (e) {; // mehr Logik für den Umgang mit den Daten; tempDataStorage = e.items}) senden;

  • Probleme:

    1. Notwendigkeit, die Abrufmethode der Datenquelle für die Datenverarbeitung (widgets Initialisierung, Datenbindung ... usw.) zu verwenden;
    2. Vermeiden Sie das Senden von zwei httprequests, wenn Sie Filter vor dem Abrufen setzen;
    3. Die Filterbedingung muss zur Laufzeit geändert werden.
+1

hast du das jemals herausgefunden? – emragins

Antwort

4

Sie können Benutzer filter in der DataSource Konfiguration. Dies sollte nur eine Anforderung mit den Filterbedingungen auslösen, die Sie in der DataSource-Konfiguration angeben.

+0

Hallo, das Problem ist, dass ich Filterbedingungen zur Laufzeit ändern muss. Konfiguration kann nur einmal eingestellt werden, habe ich recht? – Dean

+0

Sie können die Filterkonfiguration jederzeit mit 'datasource.read'' einstellen und sobald Sie eine neue Filterbedingung einstellen, ruft Kendo UI' transport.read' mit den neuen Bedingungen auf. – OnaBai

+0

Die einzige Methode in DataSource, die eine Callback-Funktion hat, ist Fetch, deshalb wähle ich es. Die dataSource.data() ist immer noch leer, nachdem dataSource.read() aufgerufen wurde, dies wird zu einem Problem, weil ich meine Widgets gleich danach nicht initialisieren kann. Gibt es trotzdem, dass ich die Filter zurücksetzen kann, bevor ich die Fetch-Methode aufrufen und nicht automatisch einen HTprequest (vor dem Fetch) sende? Vielen Dank. – Dean

4
productsDataSource._filter = { logic: 'and', filters: [ 
{ field: "Id", operator: "eq", value: 5 }]}; 

Ich habe gefunden, dass dies funktioniert. Legen Sie die interne Eigenschaft auf ein vollständiges Filterobjekt fest. Sie können anschließend den Abruf abrufen. Ich habe noch keine Möglichkeit gefunden, die Seitengröße zu ändern, ohne einen Abruf auszulösen.

3

das _filter Feld in der Datasource productsDataSource._filter = [{ field: "Id", operator: "eq", value: 5 }]; und anschließend manuell starten die Anforderung für die Datenfern, wenn Sie bereit sind, mit productsDataSource.read();

1

Ich denke, die _filter ändern wird nicht empfohlen. Das Team von telerik sollte eine bessere Möglichkeit bieten, das Filter-Array vor dem Bindevorgang zu manipulieren.

Die Filtermethode verursacht einen zweiten Serverbetrieb, das ist überhaupt nicht gut.

für den Augenblick scheint die Änderung der _filter die einzigartige Lösung zu sein, aber, achten Sie darauf, sie können den Namen dieser Variablen in der Zukunft ändern und Ihre Anwendung kann dann brechen.

+0

das sieht eher aus wie ein Kommentar dann eine direkte Antwort auf die Frage. –

+0

ja. Ich denke, es ist wichtig vorsichtig zu sein. –

0

Binden Sie den Ereignis-Listener an die Datenquelle, die das Widget initialisiert und dann die Filtermethode verwendet.

datasource.one('requestEnd', function(){ 
    // initialize or/and bind widget 
}); 
datasource.filter({ /*your filter*/ }) 
1

Obwohl es eine alte Frage ist, kommt es in Google-Ergebnissen. Also auch wenn ich weiß nicht, ob es für Kendo Version gültig ist: 2013.1.319, aber es ist derzeit ein Verfahren

dataSource.query({ 
    sort: { field: "ProductName", dir: "desc" }, 
    page: 3, 
    pageSize: 20 
}); 

Diese mehrere Optionen wie Sortieren, Filtern Paging usw. in einem einzigen Aufruf und kehrt einstellen ein Versprechen.

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-query

Verwandte Themen