2013-03-26 6 views
9

Ambiente:Kendo DataSource: come impostare filtri prima recuperano senza l'invio di due httprequests

  • kendo versione: 2013.1.319
  • dataSource:

    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 Data:

    productsDataSource.filter ([{field: "Id", operatore: "eq", valore: 5}]); // questo invierà un HttpRequest

    productsDataSource.fetch (function (e) { tempDataStorage = e.items; // più logica per trattare con i dati; });

  • problemi:

    1. necessità di utilizzare il metodo della dataSource per l'elaborazione dei dati (widgets inizializzazione, associazione dati ... etc) A me;
    2. evitare di inviare due httprequests quando si impostano i filtri prima del recupero;
    3. la condizione del filtro deve essere modificata in fase di esecuzione.
+1

hai mai capire questo? – emragins

risposta

4

È possibile all'utente filter nella configurazione DataSource. Ciò dovrebbe emettere solo una richiesta con le condizioni di filtro specificate nella configurazione DataSource.

+0

Ciao, il problema è che devo cambiare le condizioni del filtro in fase di esecuzione. la configurazione può essere impostata solo una volta, giusto? – Dean

+0

Si imposta la configurazione del filtro usando 'datasource.read'' quando lo si desidera e non appena si imposta una nuova condizione del filtro, l'interfaccia utente Kendo richiama' transport.read' con le nuove condizioni. – OnaBai

+0

L'unico metodo in dataSource con una funzione di callback è fetch, ecco perché l'ho scelto. dataSource.data() è ancora vuota dopo che viene chiamato dataSource.read(), questo diventa un problema perché non posso inizializzare i miei widget subito dopo. c'è comunque che posso resettare i filtri prima di chiamare il metodo fetch e non inviare un httprequest automaticamente (prima del recupero)? Grazie. – Dean

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

Ho trovato questo funziona. Imposta la proprietà interna su un oggetto filtro completo. È quindi possibile chiamare il recupero in seguito. Non ho ancora trovato un modo per cambiare la dimensione della pagina senza innescare comunque un recupero.

3

impostare il campo _filter nell'origine dati utilizzando productsDataSource._filter = [{ field: "Id", operator: "eq", value: 5 }]; e poi avviare manualmente la richiesta di dati a distanza quando si è pronti usando productsDataSource.read();

1

penso che cambiare la _filter non è raccomandato. Il team di telerik dovrebbe fornire un modo migliore per manipolare l'array di filtri prima dell'operazione di bind.

il metodo di filtro causa una seconda operazione del server, che non è affatto buono.

per ora, cambiare _filter sembra essere la soluzione unica, ma, attenzione, possono cambiare il nome di questa variabile in futuro e l'applicazione può interromperla.

+0

sembra più un commento che una risposta diretta alla domanda. –

+0

sì. Penso che sia importante stare attenti a questo. –

0

Associare il listener di eventi all'origine dati che inizializza il widget e quindi utilizzare il metodo filter.

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

Anche se è una vecchia domanda, è disponibile nei risultati di Google. Così, anche se non so se è valido per la versione kendo: 2013.1.319, ma non v'è attualmente un metodo

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

Questo può impostare più opzioni come ordinare, filtrare paging ecc in una singola chiamata e ritorna una promessa.

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

Problemi correlati