2

次のようなクラスの新しいインスタンスを動的に作成しようとしました:

this.componentClass.newInstance(new Symbol(''), [this, el]).reflectee;

this.componentClass に反映されたクラスが呼び出されButtonComponent、Component のサブクラスになります。これでテストを実行すると、エラーが発生します。

Test failed: Caught No constructor 'ButtonComponent.' declared in class 'ButtonComponent'.
NoSuchMethodError : method not found: 'ButtonComponent.'
Receiver: Type: class 'ButtonComponent' Arguments: [...]

Component クラスと ButtonComponent クラスの両方にデフォルトのコンストラクターがあります。何も見逃さないようにするためのコードは次のとおりです。

class Component {

  Element  element ;
  Template template;

  Component(this.template, this.element) {
    this.element.replaceWith(new Element.html(template.html));
  }

}

class ButtonComponent extends Component {

  ButtonComponent(template, element) : super(template, element) {};

}

ここで何が間違っているのでしょうか?ありがとうございました。

4

1 に答える 1

1

1.0.0.3_r30187 で同様のテストを行ったところ、このエラーは発生しません。Dart の最新の安定バージョンを使用していない場合は、バージョンを更新する必要があります。

テストしたコードは次のとおりです。

import 'dart:html';
import 'dart:mirrors';

class Component {
  Element  element ;

  Component(this.element) {
    this.element.children.add(new Element.html("<b>Dart rocks</b>"));
  }
}

class ButtonComponent extends Component {
  ButtonComponent(element) : super(element);
}

main() {
  final a = reflectClass(ButtonComponent).newInstance(new Symbol(''), 
      [document.documentElement]).reflectee;
  print(a); // display : Instance of 'ButtonComponent'
}
于 2013-11-20T07:41:13.987 に答える