Beobachtbare Datenquelle mit Abfragezustand und asynchronem Laden. Schreiboperationen laden anschließend neu; der Eigentümer entsorgt die Instanz.
Standardkonfiguration: pageSize 20, pageIndex 0, paginate true; ArrayStore lokal, andere Stores entfernt. Der Vue-Arraykurzaufruf behält Paging bei; Dart TxDataSource.array verwendet paginate false. items startet leer; load() ist erforderlich, sofern kein gebundener Konsument initial lädt. Ungültiges Paging wird abgelehnt. Store und Schlüssel durch eine neue Instanz ersetzen. configure liefert Promise/Future der neu geladenen Liste. byKey liefert Promise/Future des Datensatzes oder undefined/null; insert/update liefern den geschriebenen Datensatz, remove keinen Wert. Vue push liefert die neue Liste, Dart push keinen Wert. cancel/dispose liefern keinen Wert. Lade-/Schreibfehler stehen zusätzlich in error. Bei Stores ohne optionale Operation wirft Vue Error, Dart UnsupportedError. Nach dispose schlägt load fehl.
new TxDataSource<T>(config: TxDataSourceConfig<T> | T[]): TxDataSource<T>| Mitglied | Typ / Rückgabe | Verhalten |
|---|---|---|
| store | TxStore<T> | Datenbestand oder eigener Store-Vertrag. |
| key | TxSelector<T> | Stabiler Schlüssel beziehungsweise Selector; nicht mit Widget-Key verwechseln. |
| items | T[] | Einträge; bei Datenbindung durch dataSource ersetzt. |
| groups | TxGroup<T>[] | undefined | Gruppenhierarchie des Ergebnisses. |
| totalCount | number | Gesamtanzahl gefilterter Datensätze vor Paging. |
| groupCount | number | undefined | Anzahl oberster Gruppen vor Paging. |
| loading | boolean | Zeigt den Ladezustand. |
| error | unknown | Letzter Lade-/Schreibfehler. |
| loaded | boolean | Mindestens ein Ladevorgang war erfolgreich. |
| config | TxDataSourceConfig<T> | Konfiguration der Instanz. |
| containsKey | (key: TxKey) => boolean | undefined | Liefert false für bekannte Löschungen, beim ArrayStore einen Wahrheitswert, sonst undefined/null. |
| subscribe | (listener: () => void) => () => void | Registriert einen Änderungslistener und liefert eine Abmeldefunktion. |
| pendingLoad | Promise<T[]> | undefined | Promise des zuletzt gestarteten Ladevorgangs. |
| load | () => Promise<T[]> | Lädt mit den angegebenen Optionen; bei DataSource ohne Argumente mit aktuellem Abfragezustand. Fehler werden weitergegeben. |
| reload | () => Promise<T[]> | Lädt den aktuellen Abfragezustand erneut und liefert die sichtbaren Datensätze. |
| configure | (changes: Partial<TxDataSourceConfig<T>>) => Promise<T[]> | Ändert Abfrageoptionen und lädt neu. Suche, Filter und Seitengröße setzen die Seite zurück, sofern nicht ausdrücklich angegeben. |
| cancel | () => void | Synchron auf true setzen, um die Aktion abzubrechen. |
| byKey | (key: TxKey) => Promise<Awaited<T> | undefined> | Liest einen Datensatz anhand seines Schlüssels; fehlende Schlüssel ergeben undefined (Vue) beziehungsweise null (Dart). |
| insert | (item: T) => Promise<T> | Fügt einen Datensatz mit eindeutigem Schlüssel ein und liefert ihn zurück. |
| update | (key: TxKey, changes: Partial<T>) => Promise<T> | Aktualisiert eine Meldung beziehungsweise einen Datensatz. |
| remove | (key: TxKey) => Promise<void> | Löscht den Datensatz beziehungsweise rekursiv den Datei-/Ordnerbestand. |
| push | (changes: TxPush<T>[]) => Promise<T[]> | Führt Store-Schreiboperationen nacheinander aus und lädt einmal neu; keine Transaktion, Teilerfolg bei Fehler möglich. |
| dispose | () => void | Beendet Abfragen und Listener; danach die Instanz nicht mehr verwenden. |
import { TxDataSource } from '@tekocloud.de/tecexpress'
const source = new TxDataSource({ store: [{ id: 1, text: 'One' }], key: 'id', pageSize: 10 })
const unsubscribe = source.subscribe(() => console.log(source.loading, source.error))
await source.load()
await source.configure({ searchExpr: ['text'], searchValue: 'One' })
console.log(await source.byKey(1), source.containsKey(1))
await source.insert({ id: 2, text: 'Two' })
await source.update(2, { text: 'Updated' })
await source.push([{ type: 'update', key: 2, data: { text: 'Changed' } }])
await source.remove(2)
await source.reload()
source.cancel()
unsubscribe()
source.dispose()