Дротик 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(), он тоже не работает. Пожалуйста, дайте мне знать, если кто-то знает, как это исправить.

Спасибо, Йи

Другие вопросы по тегам