【问题标题】:Overriding default parameter names in ExtJS 4 Store覆盖 ExtJS 4 Store 中的默认参数名称
【发布时间】:2013-05-13 16:12:47
【问题描述】:

我正在尝试覆盖 Store 代理中 limitParam 的默认参数名称。我想对http://search.twitter.com/search.json?q=kathmandu&rpp=2 进行 JSONP 调用,但不是直接设置 rpp,而是想将其映射到 limitParam 并设置它的值。但它不是通过limitParam 设置的。我这样做的原因是存储发送的参数键(排序、目录等)与服务器端的参数不匹配(我无法控制)。提前致谢。

    Ext.require('Ext.grid.View');
    Ext.require('Ext.util.Point');

    Ext.application({
    name: 'HelloExt',
    launch: function() {
    /*Ext.create('Ext.container.Viewport', {
        layout: 'fit',
        items: [
            {
                title: 'Hello Ext',
                html : 'Hello! Welcome to Ext JS.'

            }
        ]
    });*/
    console.log('ok1');


    Ext.define('Video', {
        extend: 'Ext.data.Model',
        fields: ['from_user', 'from_user_id']
    });

    var myStore2 = Ext.create('Ext.data.Store', {
        model: 'Video',
        storeId : 'restfulStore',
        proxy: {
            type: 'jsonp',
            url : 'http://search.twitter.com/search.json?q=kathmandu',
            reader: {
                type: 'json',
                //root: 'data.items'
                root: 'results'
            },
            limitParam: 'rpp',
            pageParam: 'page'
        },
        listeners: {
            load: function(store, records) {
                Ext.each(records, function(rec) {
                    console.log(rec.get('from_user'));
                });
            }
        },
        sorters: [{
            property: 'from_user',
            direction: 'DESC'
        }, {
            property: 'from_user_id',
            direction: 'ASC'
        }],
        //autoLoad: true,
        remoteSort: true
    });

    var p = myStore2.getProxy();
    p.limitParam = 2;



    myStore2.load();
    console.log('loads anyway??? loaded the store ...');


    Ext.create('Ext.grid.Panel', {
        title: 'Restful Grid',
        store: Ext.data.StoreManager.lookup('restfulStore'),
        columns: [
            {header: "From User", width: 200, sortable: true, dataIndex: 'from_user'},
            {header: "From User ID", width: 200, sortable: true, dataIndex: 'from_user_id'}
        ],
        height: 400,
        width: 400,
        renderTo: Ext.getBody()
    });



    console.log('store loaded!!');
}
    });

【问题讨论】:

    标签: json extjs4 cross-domain jsonp


    【解决方案1】:

    您的代理配置可以满足您的需求。问题在于您加载商店的方式。您不应该更改limitParam,这实际上是参数名称 的配置选项。要影响结果的数量,请使用加载方法的limit 选项,您也可以在商店中使用pageSize 选项进行配置。

    所以,删除这个:

    var p = myStore2.getProxy();
    p.limitParam = 2;
    

    相反,在加载商店时使用limit 选项:

    myStore2.load({
        limit: 2
    });
    

    或者,您可以在商店配置中使用pageSize 选项进行设置:

    Ext.create('Ext.data.Store', {
        // ...
        pageSize: 2
        ,autoLoad: true
    });
    

    您可以通过使用pageSize 设置默认值并在加载时使用limit 更改它来混合两者。

    附带说明,高音 API 似乎不支持排序,因此您的 sorters 配置不会对返回的结果产生任何影响。您应该将remoteSort 切换为false 以根据您的配置在客户端对返回的结果进行排序。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多