【问题标题】:ExtJs4 - Store baseParams config property?ExtJs4 - 存储 baseParams 配置属性?
【发布时间】:2011-08-28 23:47:18
【问题描述】:

在 extjs3.x 中,我使用了 stores baseParams 配置属性来指定用于加载存储的参数。
这个属性在 extjs 4 中不再存在。我应该怎么做呢?

另外,在 extjs3 中,我可以通过使用代理 method 配置属性来指定商店代理是 GET 还是 POST 方法。我应该怎么做而不是这个?

我的 ExtJs 3 代码 ->

   var store = new Ext.data.JsonStore({
        root: 'Data',
        baseParams: {
           StartDate: '',
           EndDate: '''
        },//baseParams
    proxy: new Ext.data.HttpProxy({
        url: 'Time/Timesheet',
        method: 'POST'
    })//proxy
});//new Ext.data.JsonStore

【问题讨论】:

  • “我应该做什么来代替这个?”寻找新的框架。让我难以置信的是,Sencha 如此巨大地改变了从 ExtJS 3 到 4 的东西
  • @George:是的,这是一个很大的变化。上个月我一直在迁移我的项目。就快到了。我认为一旦完全迁移,这些好处就会得到回报。你有问题吗?

标签: javascript extjs store params extjs4


【解决方案1】:

您需要使用“extraParams”代理属性代替 Ext 3 中的 baseParams 属性。ExtJS 4 中的等效 JsonStore 如下所示:

Ext.define('YourModel', {
    extend: 'Ext.data.Model',
    fields: ['field1', 'field2']
}); 

var store = new Ext.data.Store({
    model: 'YourModel',
    proxy: {
        type: 'ajax',
        url : 'Time/Timesheet',
        root: 'Data',
        extraParams: {
            StartDate: '',
            EndDate: ''
        }
    }
});

据我所知,HTTP 传输方法是根据 RESTful 原则根据您要完成的任务自动设置的。例如,如果您加载商店,则使用 GET 请求;创建新记录使用 POST 等。

如果需要,您可以通过覆盖代理的 actionMethods 属性来覆盖它:

var store = new Ext.data.Store({
    model: 'YourModel',
    proxy: {
        type: 'ajax',
        url : 'Time/Timesheet',
        root: 'Data',
        actionMethods: {
            read: 'POST'
        },
        extraParams: {
            StartDate: '',
            EndDate: ''
        }
    }
});

【讨论】:

  • 感谢您的回复。我可以从 API 中看到关于 HTTP 传输方法的自动设置。我需要一种方法来覆盖它,因为我想使用 POST 请求来加载我的商店,因为 GET 请求的长度受到限制。有任何想法吗?再次感谢。
  • @shane87 是的,对文档进行了一些挖掘,看起来有一种方法可以覆盖它。我已经更新了答案。
【解决方案2】:

代理额外参数的问题:代理对于使用此代理创建的所有商店都是通用的! 示例:

var countries1, countries2;
countries1 = Ext.create("MyApp.store.Countries");
countries1.getProxy().setExtraParam("countriesId", 1) // add parameter 'countriesId' = 1
countries1.load();
countries2 = Ext.create("MyApp.store.Countries");
countries2.getProxy().setExtraParam("countriesId", 2) // add parameter 'countriesId' = 2
countries2.load({
    callback: function(){
        countries1.load(); // 'countriesId' is no more 1, but 2 !!!
    }
});    

如果您想在使用多个相同类型的商店调用“加载”函数之前设置参数,我建议您创建自己的实现基本参数的商店类。

Ext.define("MyStore",{
    extend: "Ext.data.Store",
    baseParams: null,
    /**
     * add base parameter to store.baseParams
     * @param {Object} key/value object: {key: value}
     */
    addBaseParam: function(obj){
        Ext.apply(this.baseParams, obj);
    },
    /**
     * add several base parameters to store.baseParams
     * @param {Array}: array of key/value object: [{key1: value1, key2: value2,...}]
     */
    addBaseParams: function(objects){
        var me = this;
        if (Ext.isArray(objects)){
            Ext.each(objects, function(obj){
                me.addBaseParam(obj);
            })
        } else if (objects){
            me.addBaseParam(objects);
        }
    },
    /**
     * reset base parameters
     */
    resetBaseParams: function(){
        this.baseParams = {};
    },
    /**
     * constructor
     * @param {object} config
     */
    constructor: function(config) {
        var me = this;
        // manage base params
        me.baseParams = me.baseParams || {};
        // call parent
        me.callParent(arguments);
    },
    /**
     * override load method to add base params to request params
     * @param {Object} options
     */
    load: function(options){
        var me = this;
        options = options || {};
        options.params = options.params || {};
        Ext.applyIf(options.params, me.baseParams);
        me.callParent([options]);
    }
});

【讨论】:

    【解决方案3】:
    var DataStore = new Ext.data.Store({
    model: 'TestItem',
    id: 'DataStore',
     proxy: {
       type: 'ajax',
       url : 'db_categoria.php',            
       actionMethods: {
               read: 'POST'
           },
       extraParams: {
                task: 'LISTING',
           },
       reader: {
        root: 'results',
        totalProperty: 'total',
          id: 'id'
         }
        }
    });
    DataStore.load({params: {start: 0, limit: 20}});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2012-06-05
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多