1

当我运行这个 EXTJS 代码时,我得到一个错误'this.proxy' is null or not an object。你能帮我解决这个问题吗?

var myData = [
                   ['J', 'MD'],
                   ['A', 'VA'],
                   ['S', 'DC'],
                   ['M', 'DE'],
                   ['B', 'NJ'],
                   ['N', 'CA'],
                   ['S', 'RT'],
                   ['S', 'CG']
                 ];
 var store = new Ext.data.ArrayStore({
        totalProperty : 8,
        autoLoad : {
            params : {
                start : 0,
                limit : 4
            }
        },
        fields : [ {
            name : 'fullName'
        }, {
            name : 'state'
        } ]
    });

 store.loadData(myData);
 var grid = new Ext.grid.GridPanel({
    store : store,
    columns : [ {
        id : 'fullName',
        header : "FullName",
        width : 160,
        sortable : true,
        dataIndex : 'fullName'
    }, {
        header : "State",
        width : 75,
        sortable : true,
        dataIndex : 'state'
    } ],
    stripeRows : true,
    autoExpandColumn : 'fullName',
    height : 350,
    width : 600,
    title : 'Array Grid',
    bbar : new Ext.PagingToolbar({
        store : store,
        pageSize : 4,
        displayInfo : true
    }),
    viewConfig : {
        forceFit : true
    }
 });
4

1 回答 1

2

您不能同时使用memory proxyautoLoad配置以及store.load. autoLoadconfig 并且store.load只能与用于实际加载数据的代理一起使用,例如Ajax代理。

但是,您可以使用Direct代理。在这种情况下,您将必须创建您direct-function将扮演的角色server-side

var myData = [
['J', 'MD'],
...
];
var myDirectfn = function(opts, fn, proxy){
  var start = opts.start, end = opts.page*opts.limit;
  var data = [];
  if (end > myData.length)
    end = myData.length;
  for (var i = start; i < end; i++)
    data.push(myData[i]);
  fn(0, {status: true, result: data});
};

//Why am I doing this? I don't know, but otherwise store will throw exception
myDirectfn.directCfg={method : {}};

var store = new Ext.data.Store({
  //totalProperty : 8, 
  pageSize: 4,
  proxy: {
    type: 'direct',
    directFn: myDirectfn,
    reader: {type: 'array'}
  },
  fields : [ {name : 'fullName'}, {name : 'state'} ]
});

这里有小提琴可以玩

更新

对于 extjs3 直接代理方法如下所示:

var myDirectfn = function(opts, fn, proxy) {
    var start = opts.start,
        end = opts.limit+opts.start,
        data = [];
    if (end > myData.length) end = myData.length;
    for (var i = start; i < end; i++)
        data.push(myData[i]);
    data.total = myData.length;
    fn(data, {
        status: true,
        result: data
    });
};
myDirectfn.directCfg = {
    method: {len:1}
};
var store = new Ext.data.ArrayStore({
    proxy: new Ext.data.DirectProxy({
        directFn: myDirectfn
    }),
    fields: [{
        name: 'fullName'},
    {
        name: 'state'}]
})

store.load({params: {start: 0, limit: 4}});

这是演示。而且您似乎可以load通过使用此插件来使用内存代理

于 2011-07-28T14:18:01.273 回答