dart vm работает, но dart2js не работает

Делаю полимерный дротик. Все отлично работает с dart vm, но когда я пытаюсь его развернуть, он терпит неудачу (компиляция была в порядке). Когда я запускаю встроенную версию js. Это дало мне ошибку

Uncaught TypeError: невозможно вызвать метод 'shL' с нулевым значением

Я попытался отследить скомпилированный код js, и похоже, что из-за запроса элемента, которого еще нет в документе (он находится в html-файле, но каким-то образом в это время загружается только заголовок документа.) Поскольку это скомпилированной версии, очень сложно отследить, какая часть пошла не так. Кроме того, в dart vm и dart2js нет ошибок.

Кто-нибудь знает, почему это происходит, или я сделал что-то не так?

PS. Я думаю, чтобы сделать dart более популярным, по крайней мере, компилятор dart2js должен быть таким же стабильным, как всякий раз, когда код работает нормально на vm, это нормально в версии js. То, что разработчик пытается отлаживать скомпилированный код js, действительно раздражает. Спасибо, Йи

==ОБНОВЛЕНИЕ==

Вот 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>

person yi chen    schedule 03.01.2014    source источник
comment
Недостаточно информации, чтобы помочь. Предоставьте примерный план того, как вы включаете файлы Dart/JS в свой HTML-файл.   -  person Florian Loitsch    schedule 04.01.2014


Ответы (2)


Обычно эта проблема возникает из-за того, что полимерные выражения обращаются к свойствам, которые отбрасываются pub builds tree-shaking. Tree-shaking сохраняет весь код, на который где-то есть ссылки, но полимерные выражения для этого пока не рассматриваются. Если ваш проект работает, когда вы запускаете сборку с опцией отладки pub build --mode=debug, то, скорее всего, причина в этом.

Если отброшенное поле/метод находится в коде, которым вы управляете, вы можете решить эту проблему, просто добавив одну из аннотаций @reflectable, @observable или @published. Если its third party code (SDK or some 3rd-party library) you can import 'dart:mirrors' and annotate it with@MirrorsUsed(options)`, где перечислены параметры, элементы дерева должны быть сохранены.

person Günter Zöchbauer    schedule 04.01.2014

Я обнаружил, что в моем исходном коде было две проблемы. 1. Я не должен загружать основной скрипт до загрузки тела, что, я думаю, также неправильно в некоторых примерах кода на странице дротика. 2. Я думаю, что initPolymer() не инициализирует элементы синхронно. Поэтому, если я вызову метод элемента сразу после initPolymer, он не сможет найти этот метод.

Я исправил 1. Однако я не знаю, как исправить 2. Я пробовал initPolymer().run(), он тоже не работает. Пожалуйста, дайте мне знать, если кто-то знает, как это исправить.

Спасибо, Йи

person yi chen    schedule 12.01.2014