ExtJs的store默认是异步的,但有时候我们必须要发送同步请求才能满足需求,比如在多线程中,要实现同步很简单,只需继承Ext.data.proxy.Ajax,重写的同步类如下:
Ext.define('Ext.ux.data.proxy.Ajax', {
extend: 'Ext.data.proxy.Ajax',
async:true,
doRequest: function(operation, callback, scope) {
var writer = this.getWriter(),
request = this.buildRequest(operation);
if (operation.allowWrite()) {
request = writer.write(request);
}
Ext.apply(request, {
async : this.async,
binary : this.binary,
headers : this.headers,
timeout : this.timeout,
scope : this,
callback : this.createRequestCallback(request, operation, callback, scope),
method : this.getMethod(request),
disableCaching: false
});
Ext.Ajax.request(request);
return request;
}
});
使用的时候,只需修改代理即可,async:false表示同步,true为异步:
proxy: Ext.create("Ext.ux.data.proxy.Ajax",{
async:false,
url:" ",
reader: {
type: 'json',
root: 'root'
}
})