2

ポリマーダーツやってます。dart vm ではすべて正常に動作しますが、デプロイしようとすると失敗します (コンパイルは問題ありませんでした)。ビルドされた js バージョンを実行すると。それは私にエラーを与えました

キャッチされていない TypeError: null のメソッド 'shL' を呼び出せません

コンパイルされたjsコードをトレースしようとしましたが、ドキュメントにまだ含まれていない要素をクエリしたためのようです(htmlファイルにありますが、その時点でドキュメントの先頭だけが読み込まれます)。コンパイルされたバージョンでは、どの部分が間違っていたのかを追跡するのは非常に困難です. また、dart vm と dart2js にもエラーはありません。

なぜこれが起こっているのか、または私が何か間違ったことをしたのか誰か知っていますか?

PS。dart をもっと普及させるには、少なくとも dart2js コンパイラは、js バージョンで vm でコードが問題なく動作する場合と同じくらい安定している必要があります。開発者がコンパイルされた 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 ツリー シェイキングによって削除されます。ツリー シェイキングは、どこかで参照されているすべてのコードを保持しますが、ポリマー式はまだ考慮されていません。オプション 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)` の場合、メンバーのツリー シェイキングを保持する必要があります。

于 2014-01-04T08:34:55.537 に答える
0

元のコードには 2 つの問題があることがわかりました。1. 本文が読み込まれる前にメイン スクリプトを読み込むべきではありません。これは、ダーツ ページのサンプル コードの一部でも間違っていると思います。2. initPolymer() は要素を同期的に初期化しないと思います。そのため、initPolymer の直後に要素のメソッドを呼び出すと、メソッドが見つかりません。

1. は修正しましたが、2. の修正方法がわかりません。initPolymer().run() を試しましたが、どちらも機能しません。直し方わかる人いたら教えてください。

ありがとう、イー

于 2014-01-12T00:26:45.787 に答える