smalljs$molПоиск⌘ KДокументацияПесочницаСравнениеЭкосистемаО проектеRU
Решение проблемGetting StartedВведениеМентальная модельБыстрый стартОт TypeScript к view.treeСтруктура проектаИнструментарийEssentialsУстановкаВьюСостояние и реактивностьРоутингРендерингТестированиеДеплойРешение проблемDataЗагрузка данныхСхемы данныхГипер БазаMoreВитринаИз React, Vue и SvelteСборник рецептовAdvancedПлагиныМетаданные модуляОфлайнGhost-вьюAboutЧастые вопросыКомандаРелизыAPI$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

Решение проблем

У каждой записи на этой странице одна и та же форма: сборка зелёная, аудит чистый, консоль молчит, а на экране пусто или не то, что вы задумывали. Компилятор этих ошибок не видит, потому что каждая из них — корректная программа, просто описывающая другой компонент. Найдите заголовок, похожий на то, что вы видите; под ним причина и лечение.

Переопределение свойства ничего не делает, ошибки нет

Имя в view.tree и имя метода в классе разошлись, чаще всего регистром: exchange_form в дереве, exchangeForm в классе. Это два разных свойства. Классовое никто не вызывает, древесное остаётся со значением по умолчанию, и никто об этом не сообщает.Имена везде snake_case и должны совпадать буква в букву. После правки .view.ts проверьте, что каждое переопределение по-прежнему называет существующее свойство; список для сверки — сгенерированный -view.tree/*.view.tree.d.ts рядом с деревом.

Нужен placeholder, disabled или type у поля ввода

Это свойства $mol_string: hint — placeholder, enabled — выключенное состояние, type — тип поля. Задавайте их там, где поле используется:1<= Password $mol_string2 hint \Password3 type \password4 enabled <= can_edit true5 value? <=> password? \Любое другое свойство любого другого компонента ищется так же: откройте его .view.tree, как показывает раздел Как читать исходники.attr * нужен для настоящих DOM-атрибутов, которые компонент ещё не моделирует, и у него своя ловушка: блок, у которого первой строкой не идёт ^, заменяет весь словарь атрибутов базы, так что написанный этак $mol_button теряет disabled, role и tabindex. Начните блок с ^, чтобы унаследовать, а потом добавляйте свои ключи:1attr *2 ^3 data_kind \primary

Слово рендерится по буквам

Строку передали туда, где ожидается список, и её растащило по символам. Строки начинаются с \, списки — с /. Обычный случай — sub, это список:1sub / <= label \Hello

Экран пустой, тесты зелёные

Переопределение выпало из .view.ts. Дерево даёт каждому свойству значение по умолчанию, поэтому, когда класс перестаёт переопределять rows(), TypeScript доволен, а список рендерится пустым. Тесты, проверяющие только модель, остаются зелёными, потому что с моделью всё в порядке.На каждое переопределение, от которого зависит экран, пишите тест, читающий то, что видит пользователь: rows(), sub(), title() под-вью или DOM. Тестирование показывает и то, и другое.

Данные не загружаются, компонент завис в состоянии загрузки

Метод с @ $mol_mem вернул промис в качестве значения: fetch( uri ).then( ... ), async-метод или результат $mol_wire_async( this ).load(). Промис в ячейке читается всеми как «всё ещё вычисляется», а когда он разрешается, ячейка пересчитывается и выдаёт свежий промис. Сеть работает, вью результата не видит никогда.Правильная форма синхронная: вызовите this.$.$mol_fetch.json( uri ) внутри ячейки и верните разобранное значение. Фибра приостановится, пока не придёт ответ, и перезапустит ячейку, так что промис в вашем коде не появляется вовсе. Там, где асинхронная работа всё-таки должна происходить в стороне, кладите её результат в отдельную ячейку состояния, а эффект пусть возвращает флаг или ключ, но не промис.Вторая причина — проглоченная ошибка: try/catch внутри ячейки, который ловит приостановку заодно с настоящими сбоями. Перебрасывайте всё, что является Promise, или пользуйтесь $mol_fail_catch, который делает эту проверку за вас.

Циклическая подписка

Метод с @ $mol_mem записал в другую ячейку или выполнил побочный эффект, который в итоге инвалидировал что-то им же прочитанное. Вычисления только читают и возвращают; записи, сеть, таймеры и DOM — дело обработчиков с @ $mol_action. Второй источник того же сообщения — связывание <=> с ребёнком вместе с методом в классе, который делегирует этому же ребёнку, о чём следующая запись.
Редактировать эту страницу на GitHubБыло полезно?ДаНетНазадДеплойВперёдЗагрузка данных
На этой страницеПереопределение свойства ничего не делает, ошибки нетНужен placeholder, disabled или type у поля вводаСлово рендерится по буквамЭкран пустой, тесты зелёныеДанные не загружаются, компонент завис в состоянии загрузкиЦиклическая подпискаMaximum call stackЗначение с большой буквы не переопределяется из TypeScriptВсе строки вложенного списка показывают один и тот же элементПоменял класс под-вью, и содержимое пропалоМетоды из view.ts базового компонента не видны в наследникеБазовый компонент из того же файла view.tree теряет поведениеСтили протекают между под-вью и компонентом внутри негоСелектор по атрибуту со значением false никогда не срабатываетЧисло в стилях ничего не меняетДва ребёнка скролла лежат друг на другеminimal_height ни на что не влияетВстроенный компонент распирает страницу вбокСторонний CSS не стилизует компонентКлик по ссылке на текущую страницу очищает URLОбработчик поля ввода срабатывает на каждый рендерИсключение из сеттера значения нигде не показываетсяКлючевое связывание обработчика ругается, что метода нетВ бандле оказался модуль, который я не используюДальше
Type to search the documentation.