#riot.js #riot
#riot.js #беспорядки
Вопрос:
Когда я добавляю (монтирую) 2 компонента на HTML-странице, я получаю ошибку «Uncaught TypeError: не удается прочитать свойство ‘class’ неопределенного значения при монтировании $ 1»
<body>
<script src="https://cdn.jsdelivr.net/npm/riot@3.13/riot compiler.js">
</script>
<script type="riot/tag">
<dict2-app>dict2-app</dict2-app>
</script>
<dict2-app></dict2-app>
<script>
riot.mount('dict2-app')
</script>
<script type="riot/tag">
<dict3-app>dict3-app</dict3-app>
</script>
<dict3-app></dict3-app>
<script>
riot.mount('dict3-app')
</script>
</body>
Код работает должным образом, когда я комментирую один из //riot.mount(‘dict{X}-app’)
Ответ №1:
Вам не нужно вызывать несколько riot.mount, вам нужен только один, как показано ниже:
riot.mount('*')
Ваш код будет:
<body>
<script src="https://cdn.jsdelivr.net/npm/riot@3.13/riot compiler.js">
</script>
<dict2-app>dict2-app</dict2-app>
<dict2-app></dict2-app>
<dict3-app>dict3-app</dict3-app>
<dict3-app></dict3-app>
<script>
riot.mount('*')
</script>
</body>
Ответ №2:
Uncaught TypeError: Cannot read property 'class' of undefined at mount$1
это бесполезное сообщение об ошибке, означающее «riot не знает о компоненте с таким именем». Убедитесь, что вы включили оба шаблона. Добавьте console.log
файлы в каждый файл и прочитайте скомпилированные исходные файлы. Если журналы не отображаются или появляются после ошибки, это ваша проблема.
И самое худшее, с чем я борюсь, это то, что вы каким-то образом включаете riot дважды. В основном первая копия получает зарегистрированные в ней теги, а вторая копия отменяет их регистрацию (или, точнее, заменяет window .бунт с копией, которая не знает ваших тегов).
Редактировать:
Я попробовал ваш пример кода и получил ту же ошибку. Он работает с другим ответом ( riot.mount('*')
), а также отлично работает с:
<script>
riot.mount('dict2-app')
riot.mount('dict3-app')
</script>
Это также работает с размещением всех тегов скрипта в конце.
<body>
<script src="https://cdn.jsdelivr.net/npm/riot@3.13/riot compiler.js">
</script>
<script type="riot/tag">
<dict2-app>dict2-app</dict2-app>
</script>
<dict2-app></dict2-app>
<script type="riot/tag">
<dict3-app>dict3-app</dict3-app>
</script>
<dict3-app></dict3-app>
<script>
riot.mount('dict2-app')
</script>
<script>
riot.mount('dict3-app')
</script>
</body>
Понятия не имею, почему это проблема.