2

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

未捕获的类型错误:无法调用 null 的方法“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>
4

2 回答 2

1

通常这个问题是由聚合物表达式访问由pub builds tree-shaking 丢弃的属性引起的。Tree-shaking 保留了在某处引用的所有代码,但尚未考虑聚合物表达式。如果您的项目在使用选项调试运行构建时有效,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)` 选项列表中的成员 tree-shaking 应该保留。

于 2014-01-04T08:34:55.537 回答
0

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

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

谢谢,易

于 2014-01-12T00:26:45.787 回答