2011-07-28 5 views
1

Когда я запустил этот код EXTJS, я получил ошибку «this.proxy» является нулевым или нет объектом. Можете ли вы мне помочь в этом, plzz?Ошибка: «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 proxy и autoLoad конфигурации, а также store.load. autoLoad 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 является скрипку играть Arround с.

UPDATE

Для 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. А также, по-видимому, вы можете использовать прокси-сервер памяти с load ing, используя this plugin

+0

@ Molecule: Спасибо, очень много. Но когда я выполняю вышеуказанный код с прямой функцией в ECLIPSE, он отображает ошибку как «Object doesn», t поддерживает это свойство или метод ». –

+0

Ошибка: строка 7, char 23481 в файле 'ext-all.js' –

+0

@ Jackie, не удастся найти, где проблема, если вы используете 'ext-all.js'. Попробуйте заменить его версией «ext-all-debug.js». Затем найдите где возникает ошибка (в каком методе какой компоненты) и скажите мне результат. –

Смежные вопросы