【发布时间】:2014-11-13 03:19:08
【问题描述】:
我已成功使用 dart 动态创建聚合物组件并添加到 dom。
但现在我想这样做无需在编译时静态导入 HTML 模板。
在我的用例中,我有一个 ID 为 myContainer 的 div 容器和一个标签为 my-tag 的自定义 Polymer Dart 组件。
我试过了:
LinkElement e = new LinkElement('link');
e.rel = 'import';
e.href= 'my-tag.html';
document.head.children.add(e);
$['myContainer'].children.add(new Element.tag('my-tag'));
但这最终会出现以下异常:
Uncaught HierarchyRequestError: Failed to execute 'appendChild' on 'Node': Nodes of type 'HTML' may not be inserted inside nodes of type '#document'.
...
请注意,将聚合物元素添加到 dom 时会引发异常,而不是在添加链接标记时引发异常。如果在编译时添加链接并注释在运行时添加它的代码,同样的代码也可以工作。
我也尝试了上面代码的几种不同变体,主要是在polymerInit 之前或polymerInit().run(...) 内部调用的单独方法中添加链接标记,但没有任何变化。
我想知道这个用例是否受支持。
【问题讨论】:
-
为什么不想静态添加导入?我认为 Polymer 变压器在您构建项目时需要它们。
-
因为我想创建一个组件库,当用户单击时,导航框架会在内容区域中显示该组件库。我已经需要从“导航器”的飞镖端导入每个组件,但这还不错,因为我需要注册“路线”。但我试图找到一种方法,不在 HTML 端包含 HTML 模板,并尽量减少添加新“页面”所需的工作。
-
你可以创建一个转换器。
-
@GünterZöchbauer 听起来很有趣。你能扩展这个概念吗?
-
我还没有建造变压器的经验。转换器由
pub build和pub serve执行,可以在构建过程中分析和修改代码。 dartlang.org/tools/pub/assets-and-transformers.html, dartlang.org/tools/pub/transformers
标签: dart polymer dart-polymer