如何检查自定义元素是否已注册?

时间:2015-06-05 10:45:16

标签: html dart dart-polymer

某些方法会创建我的自定义元素的新实例(使用聚合物创建)并将其附加到页面上。但我想在添加它之前检查元素是否已注册,并在错误的情况下将错误打印到控制台。我的意思是如果我忘记了import component html声明:

<!--I forgot write it in my HTML file -->
<!--<link rel="import" href="packages/visualytik/vis_starter.html">-->

因此,如果我忘记导入,我想在控制台中打印错误。

我知道一种棘手的方法:

import 'my_custom_component.dart';
Element component = new Element.tag('my-custom-component');
bool registered = component is MyCustomComponent;

但这很难,因为我们应该先创建组件,然后在dart文件中导入MyCustomComponent.dart。我可以用其他方式检查吗?类似的东西:

document.isRegistered('my-custom-component');

1 个答案:

答案 0 :(得分:0)

<强> UPDATE3 您还可以使用新的@HtmlImport注释。如果导入该类,则可以确保已导入该元素的HTML。另请参阅https://stackoverflow.com/a/29710355/217408

<强> UPDATE2 Hunting down unregistered elements

<强>更新 在元素类中使用自定义构造函数并在那里进行注册,但前提是它尚未完成。

class MyCustomComponent extends ... {
  bool _isRegistered;
  bool get isRegistered => _isRegistered;
  factory MyCustomComponent() {
    if(!isRegistered) {
      registerElement();
      _isRegistered = true;
    }
    return new Element.tag('my-custom-element');
  }
}

然后创建新的实例,如

new MyCustomElement();

并且您始终可以确保该元素仅被注册一次(但您当然需要使用此构造函数)。

<强>原始

如果您通过自己调用document.RegisterElement()而不是依赖于Polymer来注册元素,则需要保留对构造函数引用document.RegisterElement()的引用,否则您将无法使用创建元素的实例。 因此,您只需要检查是否已经有对构造函数的引用。另请参阅https://developer.mozilla.org/en-US/docs/Web/API/Document/registerElement