Ogni voce di questa pagina ha la stessa forma: la build è verde, l'audit è pulito, la console tace, e lo schermo è vuoto o non è quello che intendevi. Il compilatore non vede questi errori perché ognuno di essi è un programma valido che però descrive un altro componente. Trova il titolo che assomiglia a ciò che vedi; sotto ci sono la causa e la soluzione.
Il nome in view.tree e il nome del metodo nella classe non coincidono, il più delle volte per via delle maiuscole: exchange_form nell'albero, exchangeForm nella classe. Sono due proprietà. Quella della classe non viene mai chiamata, quella dell'albero mantiene il suo valore predefinito, e niente lo segnala.I nomi sono snake_case ovunque e devono coincidere lettera per lettera. Dopo aver modificato un .view.ts, controlla che ogni sovrascrittura nomini ancora una proprietà esistente; il file generato -view.tree/*.view.tree.d.ts accanto all'albero è l'elenco con cui confrontarsi.
Sono proprietà di $mol_string: hint per il placeholder, enabled per lo stato disabilitato, type per il tipo di input. Impostale dove l'input viene usato:1<= Password $mol_string2 hint \Password3 type \password4 enabled <= can_edit true5 value?<=> password?\Qualsiasi altra proprietà di qualsiasi altro componente si trova allo stesso modo: apri il suo .view.tree, come mostra Come leggere i sorgenti.attr* serve per gli attributi DOM veri che il componente non modella già, e ha una trappola tutta sua: un blocco che non ha ^ come prima riga sostituisce l'intero dizionario di attributi della base, così un $mol_button scritto in quel modo perde disabled, role e tabindex. Inizia il blocco con ^ per ereditare, poi aggiungi le tue chiavi:1attr *2^3 data_kind \primary
Una stringa è stata passata dove ci si aspetta una lista, e la stringa è stata distribuita carattere per carattere. Le stringhe iniziano con \, le liste con /. Il caso tipico è sub, che è una lista:1sub /<= label \Hello
Una sovrascrittura è caduta fuori dal .view.ts. L'albero dà a ogni proprietà un valore predefinito, così quando la classe smette di ridefinire rows(), TypeScript è soddisfatto e la lista si renderizza vuota. I test che controllano solo il modello restano verdi perché il modello sta bene.Per ogni sovrascrittura da cui dipende lo schermo, scrivi un test che legga ciò che vede l'utente: rows(), sub(), title() delle sotto-viste, oppure il DOM. Testing mostra entrambe le strade.
Un metodo @ $mol_mem ha restituito una promise come proprio valore: fetch(uri).then(...), un metodo async, o il risultato di $mol_wire_async(this).load(). Una promise dentro la cella per tutti significa «sto ancora calcolando», e quando si risolve la cella si ricalcola e produce una promise nuova. La rete funziona; la vista non vede mai un risultato.La forma giusta è sincrona: chiama this.$.$mol_fetch.json(uri) dentro la cella e restituisci il valore già parsato. La fibra si sospende finché la risposta non è arrivata e poi riesegue la cella, così la promise non compare mai nel tuo codice. Dove il lavoro asincrono deve per forza avvenire altrove, metti il suo risultato in una cella di stato separata e fai in modo che l'effetto restituisca un flag o una chiave, mai la promise.Una seconda causa è un errore inghiottito: un try/catch dentro una cella che cattura la sospensione insieme ai guasti veri. Rilancia tutto ciò che è una Promise, oppure usa $mol_fail_catch, che fa quel controllo al posto tuo.