我应用了 Ext.data.HttpProxy.doRequest 函数的覆盖来接受来自 Store.load(params) 的超时属性并创建存储。
Ext.override(Ext.data.HttpProxy, {
doRequest: function (action, rs, params, reader, cb, scope, arg) {
var timeout = 30000;
if (scope.timeout > 0) timeout = scope.timeout;
if (arg.timeout > 0) timeout = arg.timeout;
var o = {
method: (this.api[action]) ? this.api[action]['method'] : undefined,
request: {
callback: cb,
scope: scope,
arg: arg
},
reader: reader,
callback: this.createCallback(action, rs),
scope: this,
timeout: timeout
};
// If possible, transmit data using jsonData || xmlData on Ext.Ajax.request (An installed DataWriter would have written it there.).
// Use std HTTP params otherwise.
if (params.jsonData) {
o.jsonData = params.jsonData;
} else if (params.xmlData) {
o.xmlData = params.xmlData;
} else {
o.params = params || {};
}
// Set the connection url. If this.conn.url is not null here,
// the user must have overridden the url during a beforewrite/beforeload event-handler.
// this.conn.url is nullified after each request.
this.conn.url = this.buildUrl(action, rs);
if (this.useAjax) {
Ext.applyIf(o, this.conn);
// If a currently running read request is found, abort it
if (action == Ext.data.Api.actions.read && this.activeRequest[action]) {
Ext.Ajax.abort(this.activeRequest[action]);
}
this.activeRequest[action] = Ext.Ajax.request(o);
} else {
this.conn.request(o);
}
// request is sent, nullify the connection url in preparation for the next request
this.conn.url = null;
}
});