smalljs$molSzukaj⌘ KDokumentacjaPlaygroundPorównanieEkosystemO projekciePL
Rozwiązywanie problemówGetting StartedWprowadzenieModel mentalnyPierwsze krokiZ TypeScriptu do view.treeStruktura projektuNarzędziaEssentialsInstalacjaWidokiStan i reaktywnośćRoutingRenderowanieTestowanieWdrożenieRozwiązywanie problemówDataPobieranie danychSchematy danychGiper BazaMorePrezentacjaZ React, Vue i SvelteZbiór przepisówAdvancedWtyczkiMetadane modułuOfflineWidoki-duchyAboutFAQZespółWydaniaAPI$mol_button_major$mol_button_minor$mol_string$mol_number$mol_text$mol_paragraph$mol_list$mol_row$mol_link$mol_check$mol_switch$mol_select$mol_scroll$mol_page$mol_pick

Rozwiązywanie problemów

Każdy wpis na tej stronie ma ten sam kształt: build jest zielony, audyt czysty, konsola milczy, a ekran jest pusty albo pokazuje nie to, o co ci chodziło. Kompilator nie widzi tych pomyłek, bo każda z nich to poprawny program, który akurat opisuje inny komponent. Znajdź nagłówek brzmiący jak to, co widzisz; pod nim jest przyczyna i naprawa.

Nadpisanie właściwości nic nie robi i nie ma błędu

Nazwa w view.tree i nazwa metody w klasie różnią się, najczęściej wielkością liter: exchange_form w drzewie, exchangeForm w klasie. To dwie właściwości. Tej z klasy nikt nie wywołuje, ta z drzewa zostaje przy wartości domyślnej i nic tego nie zgłasza.Nazwy wszędzie są w snake_case i muszą zgadzać się co do litery. Po edycji .view.ts sprawdź, czy każde nadpisanie nadal nazywa istniejącą właściwość; wygenerowany -view.tree/*.view.tree.d.ts obok drzewa to lista do porównania.

Potrzebuję placeholdera, wyłączenia albo typu pola wejściowego

To właściwości $mol_string: hint na placeholder, enabled na stan wyłączenia, type na typ pola. Ustaw je tam, gdzie pole jest użyte:1<= Password $mol_string2 hint \Password3 type \password4 enabled <= can_edit true5 value? <=> password? \Każdą inną właściwość dowolnego innego komponentu znajduje się tak samo: otwórz jego .view.tree, jak pokazuje Jak czytać źródła.attr * służy do prawdziwych atrybutów DOM, których komponent jeszcze nie modeluje, i ma własną pułapkę: blok bez ^ w pierwszej linii zastępuje cały słownik atrybutów bazy, więc $mol_button napisany w ten sposób traci disabled, role i tabindex. Zacznij blok od ^, żeby odziedziczyć, a potem dodaj swoje klucze:1attr *2 ^3 data_kind \primary

Słowo renderuje się po literach

Ciąg znaków trafił tam, gdzie oczekiwana jest lista, i został rozłożony znak po znaku. Ciągi zaczynają się od \, listy od /. Typowy przypadek to sub, które jest listą:1sub / <= label \Hello

Ekran jest pusty, a testy zielone

Nadpisanie wypadło z .view.ts. Drzewo daje każdej właściwości wartość domyślną, więc gdy klasa przestaje definiować rows() na nowo, TypeScript jest zadowolony, a lista renderuje się pusta. Testy sprawdzające sam model zostają zielone, bo z modelem wszystko jest w porządku.Dla każdego nadpisania, od którego zależy ekran, napisz test czytający to, co widzi użytkownik: rows(), sub(), title() podwidoków albo DOM. Testowanie pokazuje oba sposoby.

Dane nigdy się nie ładują, komponent zawisł w stanie ładowania

Metoda @ $mol_mem zwróciła jako wartość obietnicę: fetch( uri ).then( ... ), metodę async albo wynik $mol_wire_async( this ).load(). Obietnica w komórce czyta się dla wszystkich jako „wciąż liczę”, a gdy się rozwiąże, komórka przelicza się i produkuje świeżą obietnicę. Sieć działa; widok nigdy nie zobaczy wyniku.Właściwy kształt jest synchroniczny: wywołaj this.$.$mol_fetch.json( uri ) wewnątrz komórki i zwróć sparsowaną wartość. Włókno zawiesza się do nadejścia odpowiedzi, a potem uruchamia komórkę jeszcze raz, więc obietnica w ogóle nie pojawia się w twoim kodzie. Tam, gdzie praca asynchroniczna musi dziać się gdzie indziej, odłóż jej wynik do osobnej komórki stanu, a efekt niech zwraca flagę albo klucz, nigdy obietnicę.Druga przyczyna to połknięty błąd: try/catch wewnątrz komórki, który łapie zawieszenie razem z prawdziwymi awariami. Przerzuć dalej wszystko, co jest Promise, albo użyj $mol_fail_catch, które robi to sprawdzenie za ciebie.

Cykliczna subskrypcja

Metoda @ $mol_mem zapisała do innej komórki albo wykonała efekt uboczny, który ostatecznie unieważnił coś, co wcześniej przeczytała. Obliczenia tylko czytają i zwracają; zapisy, sieć, timery i DOM należą do handlerów @ $mol_action. Drugie źródło tego samego komunikatu to powiązanie <=> z dzieckiem połączone z metodą w klasie, która deleguje do tego samego dziecka — opisane niżej.
Edytuj tę stronę na GitHubieCzy to było pomocne?TakNiePoprzedniaWdrożenieNastępnaPobieranie danych
Na tej stronieNadpisanie właściwości nic nie robi i nie ma błęduPotrzebuję placeholdera, wyłączenia albo typu pola wejściowegoSłowo renderuje się po literachEkran jest pusty, a testy zieloneDane nigdy się nie ładują, komponent zawisł w stanie ładowaniaCykliczna subskrypcjaMaximum call stack — przepełnienie stosu wywołańWartości zapisanej wielką literą nie da się nadpisać z TypeScriptuKażdy wiersz zagnieżdżonej listy pokazuje ten sam elementZmieniłem klasę podwidoku i jego treść zniknęłaBrakuje metod z view.ts komponentu bazowego w podklasieKomponent bazowy zadeklarowany w tym samym pliku view.tree traci swoje zachowanieStyle przeciekają między podwidokiem a komponentem w środkuSelektor na atrybucie o wartości false nigdy nie pasujeLiczba w stylu nic nie zmieniaDwoje dzieci widoku przewijania leży jedno na drugimminimal_height nie daje widocznego efektuOsadzony komponent rozpycha stronę na bokiZewnętrzny CSS nie stylizuje mojego komponentuKliknięcie linku do bieżącej strony czyści URLMój handler pola wejściowego uruchamia się przy każdym renderzeBłąd rzucony z settera wartości nigdy się nie pokazujeKluczowane powiązanie handlera jest zgłaszane jako brakująceBundle zawiera moduł, którego nigdy nie używamDalej
Type to search the documentation.