错误:'this.proxy'为null或不是EXTJS中的对象

时间:2011-07-28 11:55:00

标签: extjs extjs3

当我运行此EXTJS代码时,我收到错误'this.proxy'为null或不是对象。你可以帮我解决这个问题吗?

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

1 个答案:

答案 0 :(得分:2)

您不能同时使用memory proxyautoLoad配置以及store.loadautoLoad配置和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'} ]
});

并且here无助于玩耍。

<强>更新

对于extjs3,Direct Proxy方法如下所示:

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

这是demo。此外,您可以使用this plugin

load中使用内存代理