如何中止/取消 Sencha ExtJS v6 中商店的加载操作?

How to abort / cancel the loading operation of a store in Sencha ExtJS v6?

我在下面使用了这两个来源:

但其中 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();

应该完成这项工作。