2011-07-28 24 views
1

當我運行此EXTJS代碼時,出現錯誤'this.proxy'爲空或不是對象。你能幫我解決這個問題嗎?錯誤:'this.proxy'爲空或不是EXTJS中的對象

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

回答

2

你不能在同一時間使用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是小提琴演奏。

UPDATE

對於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。而且還似乎可以通過使用this plugin

+0

@分子利用內存代理與load ING:感謝ü非常much.But當我執行在Eclipse中的直接功能上面的代碼,它作爲「對象沒有按」顯示錯誤t支持這個屬性或方法'。 –

+0

錯誤詳細信息:第7行,在'ext-all.js'文件中的字符23481 –

+0

@Jackie,如果使用'ext-all.js',將無法找到問題所在。嘗試用'ext-all-debug.js'版本替換它。然後找出錯誤發生的地方(用什麼組件的方法)並告訴我結果。 –

相關問題