dart vm有效,但是dart2js失败了

时间:2014-01-03 23:44:33

标签: dart dart-polymer dart2js

我正在做聚合物飞镖。使用dart vm时一切正常,但是当我尝试部署它时,它失败了(编译没问题。)当我运行构建的js版本时。它给了我错误

未捕获的TypeError:无法调用null

的方法'shL'

我试图跟踪已编译的js代码,看起来似乎是因为查询了一个尚未在文档中的元素(它位于html文件中,但不知何故只是在那时加载了文档的头部。) 由于它是编译版本,因此很难追踪哪个部分出错了。此外,dart vm和dart2js也没有错误。

有谁知道为什么会这样,或者我做错了什么?

PS。我认为让dart更受欢迎,至少dart2js编译器必须像在js版本中代码在vm上正常运行时一样稳定。让开发人员尝试调试已编译的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 个答案:

答案 0 :(得分:1)

通常这个问题是由聚合物表达式访问由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 :(得分:0)

我发现原始代码中存在两个问题。 1.我不应该在加载主体之前加载主脚本,我认为它在dart页面的一些示例代码中也是错误的。 2.我认为initPolymer()不会同步初始化元素。因此,如果我在initPolymer之后调用元素的方法,则无法找到该方法。

我修复了1.但是,我不知道如何修复2.我尝试了initPolymer()。run(),它也不起作用。如果有人知道如何解决,请告诉我。

谢谢, 易