Исключение: NoSuchMethodError: метод не найден: 'whenPolymerReady'

Я использую Dart SDK 1.5.3 | полимер 0.11.0+5 | Виндовс х64. Когда я создаю созданное полимерное приложение с использованием шаблона «Пример веб-приложения с использованием полимерной библиотеки (для мобильных устройств)» и запускаю приложение, оно работает, как и ожидалось, с увеличением счетчика при нажатии кнопки.

Предполагая, что страница с

<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

В документации говорилось, что эта проблема решена, но она определенно присутствует в текущем полимере, который я использую.


person st_clair_clarke    schedule 09.07.2014    source источник


Ответы (8)


Каждый из ваших компонентов (каждый файл, содержащий тег <polymer-element>) должен импортировать полимер.html.

Убедитесь, что ваш clickcounter.html содержит строку:

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

наверху. (Это было переломное изменение в 0.11).

person dub    schedule 09.07.2014

Я ничего не знаю об этих вещах, но мне кажется, что я решил это, переместив следующий код:

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

от конца <head>er до </body>. Только мой index.html теперь содержит эти строки. Наконец, я также переместил свой импорт пользовательских элементов выше импорта основных элементов/бумажных элементов.

person pjv    schedule 07.08.2014

Мое фиктивное приложение, созданное из шаблона полимера, запускается нормально, но как только я перемещаю счетчик кликов в другой каталог, я начинаю получать эту ошибку (соответственно я обновил ссылки). Моя новая структура папок выглядит следующим образом:

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

Вот как выглядит модифицированная строка:

    <link rel="import" href="../lib/src/test/clickcounter.html">
person Andrew Skalkin    schedule 30.07.2014

Я думаю, что нашел решение.

Ссылка clickcounter.html |импортирует rel="import" href="packages/polymer/polymer.html|". В файле точки входа такого импорта нет. Когда компонент импортируется в точку входа, кажется, что условие полимера.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-polymer мог бы объяснить, что на самом деле происходит. С нетерпением жду подробного объяснения, так как впервые сталкиваюсь с этой проблемой.

person st_clair_clarke    schedule 10.07.2014

Я только что столкнулся с той же проблемой. Вы уверены, что импорт полимеров находится под импортом 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>
person dotdotcommadot    schedule 09.07.2014
comment
Все, что я изменил в сгенерированном приложении, это закомментировать импорт для «счетчика кликов» и созданного экземпляра «счетчика кликов». Все остается так же, как и в изначально работающем приложении. - person st_clair_clarke; 09.07.2014

Я не занимаюсь этой разработкой, но похоже, что ваша проблема связана с API или зависимостями, используемыми в приложении.

person dolf    schedule 09.07.2014
comment
Но ни зависимости, ни API не изменились между выполнением исходного кода, который работал, как ожидалось, и тем, в котором был удален полимерный компонент «счетчик кликов». - person st_clair_clarke; 09.07.2014
comment
Ваша полимерная упаковка актуальна? Пожалуйста, обновите свой пакет до последней версии и ревизии. - person dolf; 09.07.2014
comment
Я должен использовать самый последний Polymer. Запуск pub -upgrade не изменяет пакет. - person st_clair_clarke; 09.07.2014
comment
Пожалуйста, убедитесь, что он также не показывает никаких ... (x newer versions available)? - person Günter Zöchbauer; 09.07.2014

Я думаю, что в настройках вашего трансформатора отсутствует страница входа

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

В противном случае внимательно посмотрите на вывод, если есть какое-либо другое предупреждение или ошибка, указывающая на основную причину.

person Günter Zöchbauer    schedule 09.07.2014
comment
Моя входная страница выглядит хорошо. Я его даже не редактировал. Эта проблема воспроизводится на другой машине с чистой установкой и повторением процесса. - person st_clair_clarke; 09.07.2014
comment
Я также получил это несколько раз в последнее время, но я не знаю, что именно вызвало это. Когда я исправил все, что связано с Polymer, все исчезло. Возможно, это вызвано какими-то изменившимися требованиями после обновления Polymer. - person Günter Zöchbauer; 09.07.2014
comment
Я действительно не знаю, что исправить. Нет никаких признаков того, что есть какие-либо другие проблемы. Другие созданные ранее приложения для дротиков нормально работают со всеми установленными пакетами. Простое удаление компонента «часы-счетчик» вызывает проблему. Как будто сохранение точки входа не «перекомпилируется» из-за отсутствия лучшего слова. Оригинальные страницы, кажется, «постоянно» там. Однако это должно быть проблемой с версиями Polymer или Dart. - person st_clair_clarke; 09.07.2014
comment
Можете ли вы сделать этот проект доступным на GitHub, тогда я смогу посмотреть. - person Günter Zöchbauer; 09.07.2014
comment
Я отправлю вам zip-версию по электронной почте сейчас. Спасибо - person st_clair_clarke; 09.07.2014
comment
Отправлено на ваш адрес gmail. Спасибо - person st_clair_clarke; 09.07.2014
comment
Я не смог воспроизвести эту проблему с элементом <click-counter> или без него в вашем проекте. Dart VM version: 1.6.0-edge.38076 (Tue Jul 8 17:20:13 2014) on "linux_x64", Полимер 0.11.0+5 - person Günter Zöchbauer; 09.07.2014
comment
Возможно, это исправлено в Dart VM 1.6.0, я использую Dart VM версии 1.5.3 - стабильная | полимер 0.11.0+5. Я пока не могу перейти на версию 1.6.0, потому что есть одна важная библиотека, от которой я завишу и которая все еще находится в версии 1.5.*. - person st_clair_clarke; 09.07.2014
comment
Вы можете попытаться решить эту проблему, используя dependency_overrides, это позволяет вам переопределять/игнорировать ограничения зависимостей. - person Günter Zöchbauer; 09.07.2014
comment
Спасибо Гюнтер. Я посмотрю на это. В то же время, если у вас есть какая-либо ссылка о том, как это делается, я был бы признателен. - person st_clair_clarke; 09.07.2014
comment
см. stackoverflow.com/questions/23031384 или dartlang.org/tools/pub/dependencies.html. Просто добавьте dependency_overrides: в дополнение к dependencies: в свой pubspec.yaml и добавьте зависимость с нужным вам ограничением. dependency_overrides: important_library: '1.3.4' (здесь я не могу добавить разрыв строки в комментарий — просто отформатируйте его, как для dependencies:. - person Günter Zöchbauer; 09.07.2014
comment
Великий Гюнтер. Я признателен за это. Спасибо. - person st_clair_clarke; 09.07.2014
comment
Бесконечно благодарен. Использование Dart 1.6.0-dev.1.2 приводит все в норму. В 1.5.3 должна быть ошибка. Я ценю помощь. - person st_clair_clarke; 09.07.2014

У меня только что была точно такая же проблема. Похоже, что код перестал работать без каких-либо изменений с моей стороны.

Причина проблемы в том, что появилась новая версия полимерной упаковки.

Поэтому вам, вероятно, следует поиграть с зависимостями в файле pubspec.yaml. Я просто явно изменил версию Polymer на более старую.

person René Kolařík    schedule 17.03.2015