7 votes

Comment empêcher ext-js d'ajouter limit=25 à ma requête JSON ?

Le code suivant fonctionne. Le problème est que la requête est envoyée avec &_dc=1299207914646&limit=25 ajouté à chaque requête envoyée au serveur. Rien de ce que je peux faire ne change la limite=25. Idéalement, je ne voudrais pas que des paramètres supplémentaires soient envoyés au serveur. Je me contenterais cependant de pouvoir fixer la limite à 10000 ou quelque chose comme ça. Je suis en mesure d'ajouter d'autres paramètres, mais rien ne supprime la limite=25. J'aimerais également me débarrasser du paramètre &_dc, bien que je ne sache pas pourquoi il a été ajouté et qu'il ne pose pas de problème.

Des idées ?

note : un problème bizarre avec le formatage du code ci-dessous ?

Remerciements

    Ext.require([
    'Ext.grid.*',
    'Ext.data.*',
    'Ext.panel.*'
]);
Ext.onReady(function(){
    Ext.regModel('Image_', { // window.Image is protected in ie6 !!!
        fields: ['id', 'key', 'value']
    });    

var store = new Ext.data.JsonStore({
        model: 'Image_',
        proxy: {
            type: 'ajax',
var store = new Ext.data.JsonStore({
        model: 'Image_',
        proxy: {
            type: 'ajax',
            autoload: 'false',
            url: '/couchdb/test/_design/blah/_view/by_surname2?startkey=%22r%22&endkey=%22r\u9999%22',
            reader: {
                type: 'json',
               root: 'rows'
                    }
        }
    });
    store.load();

    var listView = new Ext.grid.GridPanel({
        width:425,
        height:250,
        collapsible:true,
        title:'Simple ListView <i>(0 items selected)</i>',
        renderTo: Ext.getBody(),

        store: store,
        multiSelect: true,
        viewConfig: {
            emptyText: 'No images to display'
        },

        headers: [{
            text: 'File',
            flex: 50,
            dataIndex: 'value'
        },{
            text: 'Last Modified',
            flex: 35, 
            dataIndex: 'key'
        },{
            text: 'Size',
            dataIndex: 'id',
            flex: 15,
            cls: 'listview-filesize'
        }]
    });

    // little bit of feedback
    listView.on('selectionchange', function(view, nodes){
        var l = nodes.length;
        var s = l != 1 ? 's' : '';
        listView.setTitle('Simple ListView <i>('+l+' item'+s+' selected)</i>');
    });
});

9voto

jprism Points 1842

Dans votre Proxy, définissez

limitParam: undefined,
pageParam: undefined,
startParam: undefined,
noCache: false,

4voto

Abdel Olakara Points 11016

Vous pouvez modifier la limite de votre magasin lorsque vous chargez le magasin.

store.load({params:{limit:50}});

Dans ce cas, je demande à ce que la limite soit fixée à 50. _dc=1299207914646 est un paramètre cache-buster unique ajouté aux requêtes GET. Si vous ne voulez pas les avoir dans l'url, vous pouvez les désactiver en configurant désactiver la mise en cache à false.

Mais je vous recommande de définir la méthode de votre magasin sur POST et de transmettre les paramètres en utilisant la méthode POST plutôt que GET. De cette façon, vous pouvez avoir des URL propres et cacher les données envoyées.

1voto

Sergey Novikov Points 2990

Vous pouvez remplacer getParams de la méthode Ext.data.proxy.Server .

Par exemple, dans mon projet, j'ai ajouté un paramètre booléen personnalisé embeddedParams et si je ne veux pas ajouter de paramètres ExtJS à une requête, je le mets à false dans un proxy de magasin :

/**
 * Added embeddedParams option
 */
Ext.define('Ext.lib.overrides.ServerProxy', {
    override: 'Ext.data.proxy.Server',

    /**
     * Add or not pagination, grouping, sorting and filtering parameters to the request. Defaults to true.
     */
    embeddedParams: true,

    /**
     * @private
     * Copy any sorters, filters etc into the params so they can be sent over the wire
     */
    getParams: function (operation) {
        var me = this,
            params = {},
            isDef = Ext.isDefined,
            groupers = operation.groupers,
            sorters = operation.sorters,
            filters = operation.filters,
            page = operation.page,
            start = operation.start,
            limit = operation.limit,
            simpleSortMode = me.simpleSortMode,
            simpleGroupMode = me.simpleGroupMode,
            pageParam = me.pageParam,
            startParam = me.startParam,
            limitParam = me.limitParam,
            groupParam = me.groupParam,
            groupDirectionParam = me.groupDirectionParam,
            sortParam = me.sortParam,
            filterParam = me.filterParam,
            directionParam = me.directionParam,
            hasGroups, index;

        if (me.embeddedParams && pageParam && isDef(page)) {
            params[pageParam] = page;
        }

        if (me.embeddedParams && startParam && isDef(start)) {
            params[startParam] = start;
        }

        if (me.embeddedParams && limitParam && isDef(limit)) {
            params[limitParam] = limit;
        }

        hasGroups = me.embeddedParams && groupParam && groupers && groupers.length > 0;
        if (hasGroups) {
            // Grouper is a subclass of sorter, so we can just use the sorter method
            if (simpleGroupMode) {
                params[groupParam] = groupers[0].property;
                params[groupDirectionParam] = groupers[0].direction || 'ASC';
            } else {
                params[groupParam] = me.encodeSorters(groupers);
            }
        }

        if (me.embeddedParams && sortParam && sorters && sorters.length > 0) {
            if (simpleSortMode) {
                index = 0;
                // Group will be included in sorters, so grab the next one
                if (sorters.length > 1 && hasGroups) {
                    index = 1;
                }
                params[sortParam] = sorters[index].property;
                params[directionParam] = sorters[index].direction;
            } else {
                params[sortParam] = me.encodeSorters(sorters);
            }

        }

        if (me.embeddedParams && filterParam && filters && filters.length > 0) {
            params[filterParam] = me.encodeFilters(filters);
        }

        return params;
    }
});

Utilisation :

store: Ext.create('Ext.data.Store', {
    ...
    proxy: {
        ...
        type: 'ajax', // or 'direct', 'jsonp' / 'scripttag'
        embeddedParams: false
    }
})

0voto

Orbit Points 6928

Ajoutez la propriété limite à votre magasin...

  limit:50,

et il n'est pas inutile d'essayer pagesize....

  pagesize:50

et voyez si l'une ou l'autre de ces solutions vous aide.

Edit : essayer aussi

 pageParam:undefined,

dans votre procuration.

a trouvé ce dernier morceau de...

http://www.sencha.com/forum/showthread.php?118445-CLOSED-1.0.1-Ext.data.JsonStore-quot-limit-quot-param-issue

-1voto

Nick Points 687

Vous pouvez modifier le paramètre de limite en utilisant

store.proxy.limitParam=null;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X