smalljs$molRechercher⌘ KDocsPlaygroundComparerÉcosystèmeÀ proposFR
DépannageGetting StartedIntroductionModèle mentalDémarrageDe TypeScript à view.treeStructure d'un projetOutillageEssentialsInstallationVuesÉtat et réactivitéRoutageRenduTestsDéploiementDépannageDataRécupération de donnéesSchémas de donnéesGiper BazaMoreVitrineDe React, Vue et SvelteRecettesAdvancedPluginsMétadonnées de moduleHors-ligneVues fantômesAboutFAQÉquipeVersionsAPI$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

Dépannage

Chaque entrée de cette page a la même forme : la compilation est verte, l'audit est propre, la console est muette, et l'écran est vide ou n'est pas ce que vous vouliez. Le compilateur ne peut pas voir ces erreurs parce que chacune est un programme valide qui décrit simplement un autre composant. Trouvez le titre qui ressemble à ce que vous voyez ; en dessous se trouvent la cause et le correctif.

Ma redéfinition de propriété ne fait rien, aucune erreur

Le nom dans view.tree et le nom de la méthode dans la classe diffèrent, le plus souvent par la casse : exchange_form dans l'arbre, exchangeForm dans la classe. Ce sont deux propriétés. Celle de la classe n'est jamais appelée, celle de l'arbre garde sa valeur par défaut, et rien ne le signale.Les noms sont en snake_case partout et doivent coïncider lettre pour lettre. Après avoir modifié un .view.ts, vérifiez que chaque redéfinition nomme encore une propriété existante ; le -view.tree/*.view.tree.d.ts engendré à côté de l'arbre est la liste à laquelle se comparer.

Il me faut un placeholder, disabled ou type sur un champ de saisie

Ce sont des propriétés de $mol_string : hint pour le placeholder, enabled pour l'état désactivé, type pour le type de saisie. Définissez-les là où le champ est utilisé :1<= Password $mol_string2 hint \Password3 type \password4 enabled <= can_edit true5 value? <=> password? \Toute autre propriété de tout autre composant se trouve de la même façon : ouvrez son .view.tree, comme le montre Comment lire les sources.attr * sert aux vrais attributs DOM que le composant ne modélise pas déjà, et il a son propre piège : un bloc sans ^ en première ligne remplace tout le dictionnaire d'attributs de la base, si bien qu'un $mol_button écrit ainsi perd disabled, role et tabindex. Commencez le bloc par ^ pour hériter, puis ajoutez vos clés :1attr *2 ^3 data_kind \primary

Un mot s'affiche lettre par lettre

Une chaîne a été passée là où une liste est attendue, et la chaîne a été étalée caractère par caractère. Les chaînes commencent par \, les listes par /. Le cas habituel est sub, qui est une liste :1sub / <= label \Hello

L'écran est vide, les tests sont verts

Une redéfinition est tombée du .view.ts. L'arbre donne à chaque propriété une valeur par défaut, donc quand la classe cesse de redéfinir rows(), TypeScript est satisfait et la liste se rend vide. Les tests qui ne vérifient que le modèle restent verts parce que le modèle, lui, va bien.Pour chaque redéfinition dont dépend l'écran, écrivez un test qui lit ce que voit l'utilisateur : rows(), sub(), title() des sous-vues, ou le DOM. Tests montre les deux.

Les données ne se chargent jamais, un composant reste bloqué en chargement

Une méthode @ $mol_mem a renvoyé une promesse comme valeur : fetch( uri ).then( ... ), une méthode async, ou le résultat de $mol_wire_async( this ).load(). Une promesse dans la cellule se lit pour tout le monde comme « calcul en cours », et quand elle se résout, la cellule se recalcule et produit une promesse toute fraîche. Le réseau fonctionne ; la vue ne voit jamais de résultat.La forme correcte est synchrone : appelez this.$.$mol_fetch.json( uri ) dans la cellule et renvoyez la valeur analysée. La fibre se suspend jusqu'à l'arrivée de la réponse puis relance la cellule, si bien que la promesse n'apparaît jamais dans votre code. Là où le travail asynchrone doit se faire ailleurs, placez son résultat dans une cellule d'état séparée et faites renvoyer à l'effet un drapeau ou une clé, jamais la promesse.Une seconde cause est une erreur avalée : un try/catch à l'intérieur d'une cellule qui attrape la suspension en même temps que les vraies défaillances. Relancez tout ce qui est une Promise, ou utilisez $mol_fail_catch, qui fait cette vérification pour vous.
Modifier cette page sur GitHubÉtait-ce utile ?OuiNonPrécédentDéploiementSuivantRécupération de données
Sur cette pageMa redéfinition de propriété ne fait rien, aucune erreurIl me faut un placeholder, disabled ou type sur un champ de saisieUn mot s'affiche lettre par lettreL'écran est vide, les tests sont vertsLes données ne se chargent jamais, un composant reste bloqué en chargementAbonnement circulaireMaximum call stackUne valeur écrite avec une majuscule ne peut pas être redéfinie depuis TypeScriptChaque ligne d'une liste imbriquée affiche le même élémentJ'ai changé la classe d'une sous-vue et son contenu a disparuLes méthodes du view.ts d'un composant de base manquent dans la sous-classeUn composant de base déclaré dans le même fichier view.tree perd son comportementLes styles débordent entre une sous-vue et le composant qu'elle contientUn sélecteur sur un attribut à false ne correspond jamaisUn nombre dans les styles ne change rienDeux enfants d'une vue de défilement se superposentminimal_height n'a aucun effet visibleUn composant embarqué pousse la page sur le côtéLe CSS d'une bibliothèque tierce ne style pas mon composantCliquer sur un lien vers la page courante vide l'URLMon gestionnaire de saisie s'exécute à chaque renduL'erreur levée par mon setter de valeur ne s'affiche jamaisUne liaison de gestionnaire à clé est signalée comme manquanteLe bundle contient un module que je n'utilise jamaisSuite
Type to search the documentation.