DynamicView
Źródło:
views/DynamicView.js
DynamicView
Dynamiczny widok z obsługą reaktywnych aktualizacji parametrów. Pobiera dane z API i renderuje pojedynczy widok na podstawie szablonu.
Parametry
type- Typ widoku:"dynamic"id- Identyfikator widoku (wymagane dla reaktywności)module- Moduł API (wymagane)method- Metoda API (wymagane)params- Początkowe parametry zapytania (opcjonalne)responsePath- Ścieżka do danych w odpowiedzi API (opcjonalne)emptyMessage- Komunikat gdy brak danych (tylko gdyfailSoft: false)loadingMessage- Komunikat podczas ładowania (opcjonalne)template- Szablon dla renderowania widoku (wymagane)failSoft- Gdytrue(domyślnie), błąd API / brak danych renderuje szablon z pustymi wartościami zamiast blokować layoutemptyData- Opcjonalny obiekt danych zastępczych przy błędzie lub pustej odpowiedzi (domyślnie{})showFetchError- Gdytrue, pokazuje dyskretny baner nad szablonem przy błędzie (domyślniefalse)schemaFrom- Ścieżka do schematu widoku w odpowiedzi API (zamiasttemplate)allow- Typy dopuszczone w zdalnym schemacie mimo ograniczeń (['html'])allowActions- Lista akcji dozwolonych w zdalnym schemacie (domyślnie wszystkie znane)
Schemat z serwera (schemaFrom)
type: dynamic
module: core/shipping
method: carrierDropdown
schemaFrom: data.view
Serwer zwraca wtedy opis widoku, a nie gotowy HTML — dzięki czemu backend nie musi generować znaczników, a strona nie wstawia obcego kodu. Zanim schemat zostanie wyrenderowany, przechodzi walidację (schemaGuard.js): dozwolone są wyłącznie znane typy widoków i znane akcje, typy wstawiające surowy kod strony (html, cssbox) wymagają jawnej zgody allow, a rejestrowanie komponentów jest zabronione, bo rejestr komponentów jest wspólny dla całej strony. actionDefinitions są dozwolone — obowiązują tylko w poddrzewie zwróconego schematu.
Niepoprawny schemat nie jest renderowany; widok pokazuje komunikat, a szczegóły błędów trafiają do konsoli.
Obsługiwane eventy
reload:{id}- Przeładowuje dane bez zmiany parametrów.
Przykład użycia
type: dynamic
id: productDetail
module: core/products
method: get
params:
id: "42"
responsePath: data
template:
type: card
title: "{{ name }}"
content:
type: text
content: "Cena: {{ price }} PLN"
