1

我使用来自https://code.google.com/p/extjs4dwr的dwrproxy.js并创建了一个带有商店的网格

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

我在 dwr 中接收数据

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

一切看起来都很好,但网格仍然处于“加载”状态并且没有视图。请帮忙。

4

1 回答 1

0

我对 DWR 一无所知,但是通过模拟您的代码,我们可以看到回调作为第一个参数传递给您的getList()方法,但它希望它作为第三个参数。

回调参数的位置实际上取决于dwrParams代理的配置选项:

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

所以,你需要做的是在代理中配置你的参数:

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

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

        // ... your reader config
    }

或者我想在加载商店之前设置这些可能更有意义:

store.proxy.dwrParams = [1,2];
store.load();

如果你想避免这种骇人听闻的方式,你可以覆盖代理的代码。例如,如果您替换这些行(在我的版本中从第 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 示例中所示),您可能需要解决此问题。

于 2013-05-24T13:43:09.790 回答