2013-05-24 2 views
1

Я использую dwrproxy.js из https://code.google.com/p/extjs4dwr и создать сетку с магазинаExtjs4 с DWRproxy

Ext.onReady(function() { 

    Ext.define('Record', { 
     extend: 'Ext.data.Model', 
     fields : [ 
      {name: 'clientName'}, 
      {name: 'type'} 
     ], 
     proxy : { 
      type: 'dwr', 
      dwrFunction : Manager.getList, 

      reader : { 
       type: 'json', 
       root: 'data', 
       totalProperty: 'count' 
      } 
     } 
    }) 

    var store = Ext.create('Ext.data.Store', { 
     requires : ['Ext.ux.DwrProxy'], 
     model: 'Record' 

    }); 

    var grid = new Ext.grid.GridPanel({ 
     store : store, 
     columns: [ 
      {header: "clientName", width: 260, sortable: true, dataIndex: 'clientName'}, 
      {header: "type", width: 260, sortable: true, dataIndex: 'type'} 
     ], 
     title:'Test view', 
     renderTo: 'container' 
    }); 


    store.load(); 
}); 

Manager.getList выглядит

Manager.getList = function(p0, p1, callback) { 
    dwr.engine._execute(Manager._path, 'Manager', 'getList', p0, p1, callback); 
    } 

И я получаю данные в ДВР

throw 'allowScriptTagRemoting is false.'; 
//#DWR-INSERT 
//#DWR-REPLY 
var s0=[];var s2={};var s3={}; 
s2.clientName='Client1';s2.type='Type1'; 
s3.clientName='Client2';s3.type='Type2'; 
s1.descendingOrder=true;s1.pageNo=null;s1.pageSize=1;s1.sortField="lastEditTime"; 
dwr.engine._remoteHandleCallback('1','0',{data:s0,dataSize:2,fromIndex:0,fromIndexDisp:1,gridState:s1,metaData:null,moreData:null,pageNo:0,pageNumber:1}); 

Everything выглядят хорошо, но сетка по-прежнему имеет статус «загрузки», и нет представления. Пожалуйста, помогите.

ответ

0

Я ничего не знаю о DWR, но, насмехаясь над кодом, мы можем видеть, что обратный вызов передается как первый аргумент вашему методу getList(), но он ожидает его в качестве третьего аргумента.

Положение обратного вызова аргумента фактически будет зависеть от выбора dwrParams конфигурации доверенного:

// adding parameters if there are defined any in proxy 
// configuration 
if (typeof (me.dwrParams) === 'object') { 
    dwrParams = dwrParams.concat(me.dwrParams); 
} 

Итак, что вам нужно сделать, это настроить Params в прокси:

proxy : { 
     type: 'dwr', 
     dwrFunction : Manager.getList, 

     // use params that are sensible for your function 
     dwrParams: [1,2], 

     // ... your reader config 
    } 

Или я думаю, что, возможно, было бы более целесообразно установить их перед загрузкой вашего магазина:

Если вы хотите избежать этого хакерского способа, вы можете переопределить код прокси. Например, если вы замените эти строки (начиная линию 71 в моей версии):

// adding parameters if there are defined any in proxy 
// configuration 
if (typeof (me.dwrParams) === 'object') { 
    dwrParams = dwrParams.concat(me.dwrParams); 
} 

К этим:

// adding parameters if there are defined any in proxy 
// configuration 
var loadParams = operation.dwrParams || me.dwrParams; 
if (typeof (loadParams) === 'object') { 
    dwrParams = dwrParams.concat(loadParams); 
} 

Вы можете затем загрузить ваш магазин в чистом виде:

store.load({ 
    dwrParams: [3,4] 
}); 

В качестве примечания, я видел ошибку в коде DwrProxy. Чуть дальше в той же функции, есть этот код, который использует dwrParams0 переменную, которая не существует:

case 'read': 
    me.dwrFunction.read.apply(null, dwrParams0); 
    break; 

Я думаю, автор имел в виду, вероятно, dwrParams[0]. Вы можете исправить это, если вам когда-либо понадобится использовать различные функции для различных операций CRUD, как в DwrProxy example.

+0

Большое спасибо за ваш ответ @rixo. Я обновил код, но у меня есть ошибка в строке 'dwrParams.push ({........ errorHandler: function (message) {if (console! = Undefined) {console.log (message);' –

+0

Почему мы помещаем в dwrParams 1 и 2? –

+0

Вы не обязаны изменять код прокси, это было всего лишь предложение для более чистого кода. – rixo