如何阻止ext-js将limit = 25添加到我的JSON查询中?

时间:2011-03-04 22:23:57

标签: javascript extjs

以下代码正常运行。问题是发送的请求附加了发送到服务器的每个请求的& _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 个答案:

答案 0 :(得分:8)

在您的代理服务器中,设置

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

答案 1 :(得分:4)

您可以在加载商店时修改商店限制。

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

在这种情况下,我要求将限制设置为50。 _dc = 1299207914646是添加到GET请求的唯一cache-buster参数。如果您不想将它们放在网址中,可以通过将 disableCaching 参数设置为false来禁用它们。

但是我建议你将你存储的方法设置为POST并使用POST而不是GET方法传递参数。这样您就可以拥有干净的URL并隐藏正在发送的数据。

答案 2 :(得分:1)

您可以覆盖Ext.data.proxy.ServergetParams方法。

例如,在我的项目中,我添加了自定义布尔参数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
    }
})

答案 3 :(得分:0)

将限制属性添加到商店......

  limit:50,

并且可能没有伤害尝试pagesize ....

  pagesize:50

并查看其中任何一个是否有帮助。

编辑:也可以尝试

 pageParam:undefined,

在您的代理中。

发现最后一件来自......

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

答案 4 :(得分:-1)

您可以使用

修改限制参数
store.proxy.limitParam=null;

答案 5 :(得分:-1)

要删除extjs 4上的_dc参数,您可以设置:

noCache: false

或者如果您使用架构师2,则取消选中此框。

答案 6 :(得分:-1)

特别针对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}); 不会影响{{1的子类需要这个特定选项(至少在开发中使用sencha touch 2.2.0 )。