2011-07-28 6 views
1

이 EXTJS 코드를 실행하면 'this.proxy'가 null이거나 객체가 아닙니다입니다. 이것에 관해 나를 도울 수 있니, plzz?오류 : 'this.proxy'가 null이거나 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

당신은 같은 시간에 store.load뿐만 아니라 memory proxyautoLoad 설정을 사용할 수 없습니다. autoLoad 구성 및 store.loadAjax 프록시와 같은 실제 데이터 로딩을위한 프록시에서만 사용할 수 있습니다.

그러나 Direct 프록시를 사용할 수 있습니다. 이 경우 역할을 수행하는 direct-function을 만들어야합니다.

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 함께 arround를 연주하는 바이올린입니다.

extjs3 직접 프록시 방법

이 같을 것이다 UPDATE : 여기

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입니다. 또한 load을 사용하는 메모리 프록시를 사용할 수있는 것으로 보입니다. this plugin

+0

@ 분자 : 고맙습니다. 위의 코드를 ECLIPSE의 직접 함수로 실행할 때 'Object doesn' 이 속성 또는 메소드를 지원하지 않습니다. ' –

+0

오류 정보 : 'ext-all.js'파일의 7 행, char 23481 –

+0

@Jackie 'ext-all.js'를 사용하는 경우 문제가있는 위치를 찾을 수 없습니다. 'ext-all-debug.js'버전으로 바꾸십시오. 그런 다음 오류가 발생한 위치 (어떤 구성 요소의 어떤 메소드에서)를 찾아 결과를 알려주십시오. –

관련 문제