[英]What does “unresolved implicit call to super constructor” mean in Dart Language?
怎么來這個例子:
import "dart:html";
class SubMenuElement extends DivElement {
SubMenuElement() {
print("my element created");
}
}
給出錯誤:
Internal error: 'file.dart': error: line x pos y: unresolved implicit call to super constructor 'DivElement()'
SubMenuElement() {
^
錯誤消息的含義是什么?工作示例如何?
DivElement沒有默認構造函數。 您需要在super上添加命名構造函數和對命名構造函數的調用。
SubMenuElement.created() : super.created();
如果您派生DOM元素,則應添加with Polymer
import 'dart:html';
import 'package:polymer/polymer.dart';
class SubMenuElement extends DivElement with Polymer {
SubMenuElement.created() : super.created();
}
您沒有聲明要創建Polymer元素,但只能使用Polymer的自定義元素,所以我假設您這樣做。
錯誤消息表示默認構造函數DivElement()
不存在。 隱式調用此構造函數是因為您未指定要調用的另一個構造函數。
話雖這么說,DivElement不能直接子類化。 但您可以通過實現DivElement而不是擴展它並委派每個調用來模擬該行為:
class MyDivElement implements DivElement {
DivElement _delegate;
MyDivElement() {
_delegate = new DivElement();
// whatever else should happen in your constructor
}
// For best performance, every member SHOULD be implemented explicitly.
String get text => _delegate.text;
Node get parentNode => _delegate.parentNode;
ShadowRoot get shadowRoot => _delegate.shadowRoot;
// But DivElement has a lot of members.
// Unused or rarely used members could also be delegated with reflection.
noSuchMethod(Invocation invocation) => reflect(_delegate).delegate(invocation);
}
您可以聲明DivElement的子類,如下所示:
import 'dart:html';
class MyDiv extends DivElement {
factory MyDiv() => new Element.tag('div', 'my-div');
MyDiv.created() : super.created();
}
工廠構造函數不是必需的,但如果要強制構造實例,則很方便。
然后,您必須先將文檔注冊到文檔,然后才能實例化它:
main() {
document.register('my-div', MyDiv, extendsTag: 'div');
document.body.append(new MyDiv()..text = 'Hello');
}
以上內容適用於Dartium,或任何本機實現自定義元素規范的瀏覽器(例如Chrome 33+)。 要在另一個瀏覽器中運行,您需要添加自定義元素polyfill。 您可以將其添加到pubspec:
dependencies:
custom_element: '>=0.9.0'
...
在運行pub get
之后,您可以將polyfill腳本添加到您的html:
<body>
<script src="packages/custom_element/custom-elements.min.js"></script>
...
</body>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.