如何中止/取消 Sencha ExtJS v6 中商店的加载操作?
How to abort / cancel the loading operation of a store in Sencha ExtJS v6?
我在下面使用了这两个来源:
- Abort an ext js grid store ajax call
- Selectively aborting an ajax request sent via Extjs Direct proxy
但其中 none 在 extjs 版本 6 中有效
如何在每次启动新操作时取消加载操作?
在 ExtJS 的 6.0.2 版本中,有些事情发生了变化,Operation
class 和 abort
方法
没有 getOperation 方法,但是有 beforeload
可以用来抓取操作。
通过收集一项或多项操作,您可以在开始新操作之前安全地 abort
它们。
以下 Typescript class 会有所帮助:
module ext_ts {
interface Abortable {
abort(): void
}
export class AutoAbortPreviousOperation {
private _storeOperations: Array<Abortable> = []
applyOnStore(store): any {
let me = this
return store.on({
destroyable: true,
beforeload: function (theStore, operation, eOpts) {
let lastOperation = me._storeOperations.pop()
if (lastOperation) {
console.log("aborting previous operation safely")
lastOperation.abort() //this abort is safe so no need to check !lastOperation.isComplete()
} else {
//nop
}
me._storeOperations.push(operation) //add this operation for later usage
return true //let the loading begin
}
})
}
}
}
注意被用户强制取消的请求statusCode
为:-1
有用的链接:
我假设商店中的底层代理是基于 AJAX 的代理。在那种情况下,一个简单的
store.getProxy().abort();
应该完成这项工作。
我在下面使用了这两个来源:
- Abort an ext js grid store ajax call
- Selectively aborting an ajax request sent via Extjs Direct proxy
但其中 none 在 extjs 版本 6 中有效
如何在每次启动新操作时取消加载操作?
在 ExtJS 的 6.0.2 版本中,有些事情发生了变化,Operation
class 和 abort
方法
没有 getOperation 方法,但是有 beforeload
可以用来抓取操作。
通过收集一项或多项操作,您可以在开始新操作之前安全地 abort
它们。
以下 Typescript class 会有所帮助:
module ext_ts {
interface Abortable {
abort(): void
}
export class AutoAbortPreviousOperation {
private _storeOperations: Array<Abortable> = []
applyOnStore(store): any {
let me = this
return store.on({
destroyable: true,
beforeload: function (theStore, operation, eOpts) {
let lastOperation = me._storeOperations.pop()
if (lastOperation) {
console.log("aborting previous operation safely")
lastOperation.abort() //this abort is safe so no need to check !lastOperation.isComplete()
} else {
//nop
}
me._storeOperations.push(operation) //add this operation for later usage
return true //let the loading begin
}
})
}
}
}
注意被用户强制取消的请求statusCode
为:-1
有用的链接:
我假设商店中的底层代理是基于 AJAX 的代理。在那种情况下,一个简单的
store.getProxy().abort();
应该完成这项工作。