我使用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});
一切看起来都不错,但网格仍然处于“加载”状态,并且没有视图。 请帮忙。
答案 0 :(得分: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();
如果你想避免这种hackish方式,你可以覆盖代理的代码。例如,如果您替换这些行(在我的版本中从第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]
。如果您需要为DwrProxy example中的不同CRUD操作使用不同的函数,则可能需要解决此问题。