Дротик VM работает, но dart2js не удается
Я делаю дротик из полимера. С dart vm все работает нормально, но когда я пытаюсь развернуть его, он не работает (компиляция прошла нормально.) Когда я запускаю версию js для сборки. Это дало мне ошибку
Uncaught TypeError: Невозможно вызвать метод 'shL' с нулевым значением
Я попытался отследить скомпилированный js-код, и, похоже, из-за запроса элемента, которого еще нет в документе (он находится в html-файле, но каким-то образом в этот момент загружается только заголовок документа). скомпилированная версия, очень трудно отследить, какая часть пошла не так. Также нет ошибок в dart vm и dart2js.
Кто-нибудь знает, почему это происходит, или я сделал что-то не так?
PS. Я думаю, чтобы сделать dart более популярным, по крайней мере, компилятор dart2js должен быть таким же стабильным, как всякий раз, когда код отлично работает на vm, в js-версии все в порядке. То, что разработчик пытается отладить скомпилированный js-код, действительно раздражает. Спасибо, Йи
==UPDATE==
Вот HTML-файл (до сборки)
<html>
<head>
<meta charset="utf-8">
<title>Sample app</title>
<link rel="stylesheet" href="myHtml.css">
<link rel="import" href="template/my-element.html">
<script type="application/dart">export 'main.dart';</script>
<script src="packages/browser/dart.js"></script>
</head>
<body>
<my-element id="myElement" class="myElement" numOfRow="3"></my-element>
</body>
</html>
2 ответа
Обычно эта проблема вызвана полимерными выражениями, обращающимися к свойствам, которые отбрасываются pub build
с деревьев дрожит. При встряхивании дерева сохраняется весь код, на который ссылаются где-то, но выражения полимера для этого пока не рассматриваются. Если ваш проект работает, когда вы запускаете сборку с опцией debug pub build --mode=debug
тогда очень вероятно, что это причина.
Если выбранное поле / метод находится в коде, которым вы управляете, вы можете решить эту проблему, просто добавив одну из аннотаций @reflectable
, @observable
, или же @published
, Если оноs third party code (SDK or some 3rd-party library) you can import 'dart:mirrors' and annotate it with
@MirrorsUsed(options)`где список опций должен сохраняться при встряхивании членов.
Я обнаружил, что в моем исходном коде было две проблемы. 1. Я не должен загружать основной скрипт перед загрузкой тела, что, я думаю, также неверно в некоторых примерах кода на странице дротика. 2. Я думаю, что initPolymer() не инициирует элементы синхронно. Поэтому, если я вызываю метод элемента сразу после initPolymer, он не может найти метод.
Я исправил 1. Однако я не знаю, как исправить 2. Я попробовал initPolymer(). Run(), он тоже не работает. Пожалуйста, дайте мне знать, если кто-то знает, как это исправить.
Спасибо, Йи