【问题标题】:Breaking on exception: type 'HtmlElement' is not a subtype of type打破异常:类型“HtmlElement”不是类型的子类型
【发布时间】:2014-12-16 14:57:31
【问题描述】:

我见过很多其他类似的错误,但我不确定它们是否相关。 我基本上是在尝试动态创建聚合物组件并将它们添加到现有页面,一旦工作正常,我想创建自己的聚合物组件并在页面中动态添加/删除它们。

pubspec.yaml:

name: alm
description: alm
dependencies:
  browser: any
  polymer: ">0.15.3"
  paper_elements: any
transformers:
- polymer:
    entry_points:
      - web/index.html

index.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test</title>  
    <link rel="import" href="packages/paper_elements/paper_button.html">    
  </head>
  <body unresolved>   
    <script type="application/dart" src="index.dart"></script>    

    <paper-button raised class="colored">colored</paper-button>
    <paper-button raised disabled>disabled</paper-button>

    <div id="more-buttons"></div>

    <script src="packages/browser/dart.js"></script>
  </body>
</html>

index.dart:

import 'dart:html';
import 'package:polymer/polymer.dart';
import 'package:paper_elements/paper_input.dart';
void main(){

  initPolymer().run(() {
    Polymer.onReady.then((_) {     
      DivElement div =   querySelector("#more-buttons");
      div.appendText("text 1 2 3");
      PaperInput pinput = new PaperInput.created();
      div.append(pinput);      
    });
  });

}

我得到的异常:

打破异常:类型“HtmlElement”不是类型的子类型 '函数结果'的'PaperInput'。

如果我尝试使用 Element 对象:

  Element y = new Element.tag('paper-input');
  div.append(y);

打破异常:类型“HtmlElement”不是类型的子类型 '函数结果'的'PaperInput'。

例外:“HtmlElement”类型不是“PaperInput”类型的子类型 '函数结果'。 (包:paper_elements/paper_input.dart:40)

我也很好奇为什么一切都如此庞大:

我正在使用标准的 dart 编辑器,然后在 Dartium 中单击运行以运行应用程序。

更新:

我已经更新了代码,现在得到了不同的错误。 必须更新 pubspec.yaml 中的聚合物版本,任何都会导致错误。

浏览器控制台:

Failed to load resource: the server responded with a status of 404 (Not Found)
  http://localhost:8080/packages/web_components/webcomponents.js
Failed to load resource: the server responded with a status of 404 (Not Found)
  http://localhost:8080/packages/web_components/interop_support.html
Failed to load resource: the server responded with a status of 404 (Not Found)
  http://localhost:8080/packages/custom_element_apigen/src/common.dart
An error occurred loading file: package:custom_element_apigen/src/common.dart

我现在看到的是按钮短暂闪烁,然后是白屏。

工具输出给我以下错误:

Resolving dependencies...
Got dependencies!


--- 6:10:00 PM Starting pub serve : ______ ---
Loading source assets...
Loading polymer transformers...
Serving alm web on http://localhost:8080
[Warning from ImportInliner on alm|web/index.html]:
line 10, column 1 of package:paper_elements/src/polymer/polymer.html: Failed to inline HTML import: Could not find asset web_components|lib/interop_support.html.
null. See http://goo.gl/5HPeuP#polymer_25 for details.
<link rel="import" href="../../../../packages/web_components/interop_support.html">
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Build completed successfully

查看建议的链接:

Error while inlining an import
An error occurred while inlining an import in the polymer build. This is often the result of a broken HTML import.

我真的看不出我的 index.html 有什么问题,我可以在 paper_elements 包下看到导入。

更新2:

将聚合物版本更新到 >0.15.3,还运行了 pub upgradepub cache repair 现在看到不同的异常:

Exception: Uncaught Error: created called outside of custom element creation.
Stack Trace:
#0      Blink_Utils.initializeCustomElement (dart:_blink:31040)
#1      _Utils.initializeCustomElement (dart:html:41640)
#2      _initializeCustomElement (dart:html:41835)
#3      Element.Element.created (dart:html:11675)
#4      HtmlElement.HtmlElement.created (dart:html:17615)
#5      HtmlElement&DomProxyMixin.HtmlElement&DomProxyMixin.created (package:paper_elements/paper_input.dart:4:1)
#6      HtmlElement&DomProxyMixin&PolymerProxyMixin.HtmlElement&DomProxyMixin&PolymerProxyMixin.created (package:paper_elements/paper_input.dart:4:1)
#7      PaperInput.PaperInput.created (package:paper_elements/paper_input.dart:39:26)
#8      main.<anonymous closure>.<anonymous closure> (http://localhost:8080/index.dart:12:31)
#9      _RootZone.runUnary (dart:async/zone.dart:1155)
#10     _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:484)
#11     _Future._propagateToListeners (dart:async/future_impl.dart:567)
#12     _Future._completeWithValue (dart:async/future_impl.dart:358)
#13     _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:412)
#14     _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
#15     _asyncRunCallback (dart:async/schedule_microtask.dart:48)
#16     _handleMutation (dart:html:41819)

对于纸质按钮似乎工作正常,按钮实际显示:

  PaperButton y = new PaperButton();
  y.text = "KOTS";
  y.raised = true;
  div.append(y);

可能是纸张元素中的错误,如果需要,将调查并记录错误。

【问题讨论】:

    标签: dart dart-polymer dart-html


    【解决方案1】:

    转换器配置缺少 entry_page 设置,并且聚合物应用程序的自定义 main 方法不完整(请参阅 https://stackoverflow.com/a/20982658/217408
    对不起,简短的回答,我在打电话。

    【讨论】:

    • 我已经更新了代码和问题,修复了这些错误以及导致无法加载的其他错误。另外,我可以在飞镖中使用的最新版本的聚合物是什么?文档建议使用 0.12 - 0.13,但我在网络上流传的示例中看到了更大的版本号。
    • 0.15.3 是我记得的最新版本,您可以并且应该使用它。要通过在 pubspec.yaml 中指定最低版本来消除错误更新到较新版本,请运行 pub upgrade,如果仍然遇到类似错误,请在命令行上运行 pub cache repair
    • 我不知道从哪里得到 pub,所以我在更新 dart 版本后将它从 dart 编辑器 sim 链接到 /usr/bin/pub,运行 pub upgradepub cache repair。现在得到一个很大的堆栈跟踪,至少按钮和文本现在正在加载,尽管仍然像屏幕截图中那样庞大。
    • created 构造函数绝对是创建新 Polymer 元素的错误方法。应该有一个生成的工厂构造函数,但我不知道它是如何命名的。 element.tag 现在应该在您修复 main 方法后也可以工作了。
    • 使用 Element.tag 时,如果我执行检查元素,我可以看到 &lt;paper-input&gt;&lt;/paper-input&gt; 元素,但它不能像那样使用。我猜这也不是正确的方法吗?我正在浏览 paper_input.dart 的代码,我看到它扩展了 HtmlElement,它位于一个巨大的 ~42000 loc 文件中。是否存在通过 dart 代码创建聚合物组件的工厂方法,或者应该避免这种情况?我无法立即看到可以通过 dart 为我创建可用聚合物组件的工厂方法。
    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 2018-09-24
    • 2020-04-23
    • 2021-09-19
    • 2021-02-13
    • 2021-07-18
    • 2021-12-28
    相关资源
    最近更新 更多