我对url
代理的ajax
字段以及Ext.Ajax.request
我从Ext.Ajax.request
收到JSON回复,并将该数据发送到store
。 (我也试图使用目前非常不合作的pagingToolbar
)
无论如何,当我使用ajax
代理时,分页似乎只是稍微工作,但是我不确定要把什么作为URL。目前是url: ''
var store = Ext.create('Ext.data.Store', {
storeId : 'resultsetstore',
autoLoad : false,
pageSize : itemsPerPage,
fields: [
{name : 'id', type : 'auto'},
{name : 'name', type : 'auto'},
{name : 'description', type : 'auto'}
],
proxy: {
type : 'ajax',
url : '???',
reader: {
type : 'json',
root : 'elements'
}
}
});
似乎url
从特定目录中的.json
文件中读取数据(即url: 'myData/data.json'
),但是没有任何类似的文件可以读取,因为我{ {1}}将作为 JSON对象返回。
这是我的response
,我解析并发送给request/response
:
store
单独请求是多余的吗?
我可以单独在我的商店中完成此操作(将我的var request = Ext.Ajax.request({
url : 'MCApp', //here I specify the Servlet to be read from
jsonData : searchquery, //A JSON Object
params:{
start:0,
limit: itemsPerPage
},
success : function(response) {
mainresponse = response.responseText;
//etc.
}
作为参数传递给服务器和所有爵士乐吗?
我提前为这个混乱的问题道歉!
干杯
答案 0 :(得分:2)
您可以使用内存代理并使用data属性设置商店数据,但我不建议这样做。
如果我在哪里,我会忘记ajax请求,并开始利用商店的代理。
这是一个例子
var store = Ext.create('Ext.data.Store', {
storeId: 'resultsetstore',
autoLoad: false,
pageSize: 20,
fields: ['id','name','description'],
proxy: {
type: 'ajax',
url: 'urlToTheServlet', //here I specify the Servlet to be read from
extraParams: {
searchquery: 'Test'
}, //A String Object
reader: {
type: 'json',
root: 'elements'
}
}
});
store.load();
请注意,开始,限制将在后台处理。您不必手动设置它们。您可以设置pageSize,但它有自己的默认值,因此不需要。
这是您的数据预期的样子:
{
"elements": [
{
"id": 1,
"name": "John",
"description": "Project Manager"
},
{
"id": 2,
"name": "Marie",
"description": "Developer"
},
{
"id": 3,
"name": "Tom",
"description": "Technical Lead"
}
]
}
更新: 将对象作为有效负载传递给代理
我遇到了同样的问题,我无法找到开箱即用的解决方案,所以我编写了自己的代理来解决这个问题。
Ext.define('BCS.data.proxy.AjaxWithPayload', {
extend: 'Ext.data.proxy.Ajax' ,
alias: 'proxy.ajaxwithpayload',
actionMethods: {
create: "POST",
destroy: "POST",
read: "POST",
update: "POST"
},
buildRequest: function(operation) {
var me = this,
request = me.callParent([operation]);
request.jsonData = me.jsonData;
return request;
}
});
现在你可以这样做:
var store = Ext.create('Ext.data.Store', {
storeId: 'resultsetstore',
autoLoad: false,
pageSize: 20,
fields: ['id','name','description'],
proxy: {
type: 'ajaxwithpayload',
url: 'urlToTheServlet', //here I specify the Servlet to be read from
jsonData : YOUR_OBJECT
reader: {
type: 'json',
root: 'elements'
}
}
});
答案 1 :(得分:0)
我更喜欢将每个方法保存在一个单独的端点中:
proxy: {
type: 'ajax',
reader: {
type: 'json'
},
api: {
read: 'getCenarioTreeNode', // To request a node children (expand a node)
create: 'createCenarioTreeNode', // When you insert a node
update: 'updateCenarioTreeNode', // When you change a node attribute
destroy: 'destroyCenarioTreeNode' // When you delete a node
},
writer: {
type:'json',
encode:true,
rootProperty:'data'
}
},