【问题标题】:Error: 'this.proxy' is null or not an object in EXTJS错误:'this.proxy' 为空或不是 EXTJS 中的对象
【发布时间】:2011-07-28 11:55:00
【问题描述】:

当我运行这个 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
    }
 });

【问题讨论】:

    标签: extjs extjs3


    【解决方案1】:

    您不能同时使用memory proxyautoLoad 配置以及store.loadautoLoad config 和 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 直接代理方法如下所示:

    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。而且似乎您可以使用loading 使用内存代理this plugin

    【讨论】:

    • @Molecule:非常感谢。但是当我在 ECLIPSE 中使用直接函数执行上述代码时,它会显示错误为“对象不支持此属性或方法”。
    • 错误详情:'ext-all.js' 文件中的第 7 行,字符 23481
    • @Jackie,如果您使用的是“ext-all.js”,将无法找到问题所在。尝试用 'ext-all-debug.js' 版本替换它。然后定位错误发生在哪里(在什么组件的什么方法中)并告诉我结果。
    • @Molecule:我认为 EXTJS 版本有所不同。我使用的是 EXTJS 版本 3。所以,你能帮我解决一下它支持第 3 版吗?
    • @Jackie,哎呀。是的,这可能是真的。我的例子是 ExtJS4。抱歉,我会尝试为 ExtJS3 重建它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2011-05-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多