Как остановить ext-js от добавления limit = 25 в мой JSON-запрос? - PullRequest
6 голосов
/ 05 марта 2011

Следующий код работает.Проблема в том, что запрос отправляется с приложением & _dc = 1299207914646 & limit = 25 к каждому запросу, отправляемому на сервер.Ничто, что я могу сделать, не изменяет предел = 25.В идеале я не хочу, чтобы дополнительные параметры отправлялись на сервер.Тем не менее, я смог бы установить ограничение в 10000 или что-то еще.Я могу добавить другие параметры, но ничего, что я делаю, не снимает ограничение = 25.Я также хотел бы избавиться от параметра & _dc, хотя я не знаю, почему он был добавлен, он не вызывает проблем.

Есть идеи?

примечание: какая-то странная проблема сформатирование кода ниже?

Спасибо

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

Ответы [ 7 ]

8 голосов
/ 02 мая 2013

В вашем прокси установите

limitParam: undefined,
pageParam: undefined,
startParam: undefined,
noCache: false,
4 голосов
/ 05 марта 2011

Вы можете изменить свой лимит магазина при загрузке магазина.

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

В этом случае я прошу установить ограничение в 50. _dc = 1299207914646 - уникальный параметр кеша, добавляемый в запросы GET. Если вы не хотите, чтобы они были в URL, вы можете отключить их, установив для параметра disableCaching значение false.

Но я бы порекомендовал вам установить метод хранения в POST и передать параметры, используя метод POST, а не метод GET. Таким образом, вы можете иметь чистые URL-адреса, а также скрыть отправляемые данные.

1 голос
/ 20 декабря 2016

Вы можете переопределить getParams метод Ext.data.proxy.Server.

Например, в моем проекте я добавил пользовательский логический параметр embeddedParams, и если я не хочу добавлять ExtJSпараметры запроса я установил в false в прокси магазина:

/**
 * 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;
    }
});

Использование:

store: Ext.create('Ext.data.Store', {
    ...
    proxy: {
        ...
        type: 'ajax', // or 'direct', 'jsonp' / 'scripttag'
        embeddedParams: false
    }
})
0 голосов
/ 09 мая 2013

Специально для Json , чтобы избавиться от параметра _dc, в вашем прокси-объекте установите параметр конфигурации, заданный Tharahan:

proxy: {
    type: 'ajax',
    api: {
           read: 'app/data/something.json',
           update: 'app/data/something.json'
       },
    reader: {
        type: 'json',
        ...
    },
    writer: {
        type: 'json',
        ...
    },
    noCache: false
}

РЕДАКТИРОВАТЬ: (извините, яне смотрел дату публикации, но потерял так много времени с ней) Обратите внимание, что глобальный Ext.Loader.setConfig({disableCaching: false}); не влияет на подклассы Ext.data.proxy.Server, которые нуждаются в этой конкретной опции ( по крайней мере вразработка с Sencha Touch 2.2.0 ).

0 голосов
/ 19 сентября 2012

Чтобы удалить параметр _dc в extjs 4, вы можете установить:

noCache: false

или просто снять флажок, если вы используете архитектуру 2.

0 голосов
/ 05 января 2012

Вы можете изменить предельный параметр, используя

store.proxy.limitParam=null;
0 голосов
/ 05 марта 2011

добавьте свойство limit в ваш магазин ...

  limit:50,

и, возможно, не помешает попробовать размер страницы ....

  pagesize:50

и посмотрите, поможет ли какой-либо из них.

Редактировать: также попробуйте

 pageParam:undefined,

в вашем прокси.

обнаружил, что последний кусок из ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...