Abort Postbacku

Zdravím,
měl bych otázku jak by bylo možné přerušit již běžící postback (v tomto případě z důvodu toho, že již běží příliš dlouho a uživatel se rozhodl akci přerušit).

Děkuji za rady.

Určitě to je možné, jen aktuálně trochu komplikované. Jako první krok si budete muset napsat vlastní postback handler, kde dostanete přístup k JavaScriptovému objektu PostbackOptions, kde můžete nastavit abortSignal (pozor, že options se zároveň jmenují parametry toho postback handleru, tzn to co nastavujete v markupu):

dotvvm.postbackHandlers["my-abort"] = (options) => {
	return {
		execute(callback, postbackOptions) {
			const abortController = new AbortController()
			postbackOptions.abortSignal = abortController.signal
			
			someeventregistration(() => abortController.abort())
			
			return callback()
		},
	};
};

Další info jak ho zaregistrovat a použít je na:

Pak tento postback handler můžete aplikovat na libovolnou controlku.

Nevím podle čeho chcete určit, že už je potřeba postback přerušit, předpokládám, že kliknutí na tlačítko nebo timeout. V každém případě budete muset zaregistrovat ručně v JS nějaký event handler, který zavolá abortController.abort(). Pokud byste chtěl přerušení udělat na základě změny hodnoty view modelu, můžete použít postbackOptions.knockoutContext.$data.PostbackShouldBeCancelled.subscribe(newValue => { if (newValue) { abortController.abort() } })