例外:NoSuchMethodError:找不到方法:' whenPolymerReady'

时间:2014-07-09 02:18:58

标签: dart dart-polymer

我正在使用Dart SDK 1.5.3 |聚合物0.11.0 + 5 | Windows x64。当我使用模板'样本网络应用程序使用聚合物库(移动友好)选项创建一个创建的聚合物应用程序'然后运行应用程序按预期工作,单击按钮时计数器递增。

假设页面带有

<script type="application/dart">
  export 'package:polymer/init.dart';
</script>

是index.html,试图通过从index.html

中删除以下行来重构应用程序
<click-counter count="5"></click-counter>
<link rel="import" href="clickcounter.html">

导致以下错误:

Exception: NoSuchMethodError: method not found: 'whenPolymerReady'
Receiver: Instance of 'JsFunction'
Arguments: [Closure: () => dynamic] (package:polymer/src/loader.dart:115)
Breaking on exception: NoSuchMethodError: method not found: 'whenPolymerReady'

我一直在使用这种机制来创建任何聚合物应用程序,但是从未见过这样的例外,尽管我在网上看过涉及Dart的文档https://www.google.com.jm/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CBwQFjAA&url=http%3A%2F%2Fcode.google.com%2Fp%2Fdart%2Fissues%2Fdetail%3Fid%3D19161&ei=MZq8U_nlK42KyASBkYHgCw&usg=AFQjCNHOc6MD-mhzPbDOmg8Hp5NeqVufqQ&bvm=bv.70138588,d.aWw

文件表明这个问题已经解决,但它肯定存在于我目前使用的聚合物中。

8 个答案:

答案 0 :(得分:6)

每个组件(每个包含<polymer-element>标签的文件)都必须导入polymer.html。

确保您的clickcounter.html包含以下行:

<link rel="import" href="packages/polymer/polymer.html" />

在顶部。 (它在0.11中突破了变化)。

答案 1 :(得分:1)

我刚遇到同样的问题。 你确定你的聚合物进口是在你的javascript导入下吗?

<!-- <script src="packages/web_components/platform.js"></script>
     not necessary anymore with Polymer 0.14.0 -->
<script src="packages/web_components/dart_support.js"></script>
<!-- import the click-counter -->
<link rel="import" href="clickcounter.html">

而不是:

<!-- import the click-counter -->
<link rel="import" href="clickcounter.html">
<script src="packages/web_components/platform.js"></script>
<script src="packages/web_components/dart_support.js"></script>

答案 2 :(得分:1)

我想我找到了解决方案。

clickcounter.html | imports link rel =“import”href =“packages / polymer / polymer.html |”。在入口点文件中,没有这样的导入。将组件导入入口点时,似乎满足polymer.html条件。如果没有组件,导入必须直接放在文件中。

    <!DOCTYPE html>

    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Sample app</title>
        <!-- <script src="packages/web_components/platform.js"></script>
             not necessary anymore with Polymer > 0.14.0 -->
        <script src="packages/web_components/dart_support.js"></script>

        <link rel="import" href="packages/polymer/polymer.html">

        <script type="application/dart">export 'package:polymer/init.dart';</script>
        <script src="packages/browser/dart.js"></script>


        <link rel="stylesheet" href="epimss_material_design.css">
      </head>
      <body>
        <h1>Epimss material design</h1>

        <p>Hello world from Dart!</p>

        <div id="sample_container_id">

        </div>

      </body>
    </html>

之后一切正常。

同样的问题实际上在Dart SDK 1.6.0-dev.1.2中重新出现并且同样解决了。不过,我不能说它是不是一个错误。它只是通过添加此导入工作。我想如果使用合法组件,导入将允许从入口点文件中删除相同的导入。 Dart或Dart聚合物专家之一可能能够解释实际发生的情况。期待深入解释,因为这是我第一次观察到这个问题。

答案 3 :(得分:1)

我从聚合物模板创建的虚拟应用程序启动正常,但是一旦我将clickcounter移动到另一个目录,我就开始收到此错误(我已相应地更新了引用)。我的新文件夹结构如下:

/lib
  /src
    /test
       clickcounter.dart
       clickcounter.html
/web
  polytest.html 

这是修改后的行的样子:

    <link rel="import" href="../lib/src/test/clickcounter.html">

答案 4 :(得分:1)

我对这些事情一无所知,但对我来说,我似乎通过移动以下代码解决了这个问题:

<!-- after the Polymer elements imports -->
<script type="application/dart">export 'package:polymer/init.dart';</script>    
<script async src="packages/browser/dart.js"></script>

<head>的末尾到</body>之前。 现在只有我的index.html包含这些行。最后,我还将我的自定义元素导入移到了core-elements / paper-elements导入上面。

答案 5 :(得分:0)

我不参与该开发,但似乎您的问题是应用程序中使用的API或依赖项。

答案 6 :(得分:0)

我认为您的变压器设置缺少输入页面

transformers:
- polymer:
    entry_points:
    - example/index.html

否则,如果存在指向根本原因

的任何其他警告或错误,请仔细查看输出

答案 7 :(得分:0)

我刚才有同样的问题。看起来代码停止工作而我没有做任何更改。

问题的根本原因是,出现了新版聚合物包装。

所以你应该在 pubspec.yaml 中使用依赖。我只是明确地将Polymer的版本更改为较旧的版本。