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

标签 html dart dart-polymer

某些方法会创建我的自定义元素的新实例(使用聚合物创建),并将其附加到页面上。但是我想检查元素是否已注册,然后再添加它并在错误的情况下将错误打印到控制台。我的意思是,如果我忘记导入组件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');

最佳答案

Update3
您也可以使用新的@HtmlImport批注。如果导入该类,则可以确保也导入了元素的HTML。另请参阅https://stackoverflow.com/a/29710355/217408

更新2
参见Hunting down unregistered elements

更新
在您的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

关于html - 如何检查自定义元素是否已注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664576/

相关文章:

jquery - HTML如何在带有变量的div内容上获取滚动条?

javascript - 在 div 中滚动时如何在 jQuery 中使用 scrollTop?

flutter - 刷新页面时AutoCompleteTextField检索null

dart - polymer 表中的模板重复动态对象

dart - dart 中 Paper 元素的实例

html - Canvas 滚动条不起作用

jquery - 背景图像上方的背景颜色

flutter - Flutter中的FutureBuilder:RangeError(RangeError(index):无效值:有效值范围为空:0)

dart - 如何让 pub build 在 dart 聚合物项目上使用源映射

dart - Polymer.dart <property>更改的功能不适用于 map