Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart:使用抽象类扩展HtmleElement_Dart - Fatal编程技术网

Dart:使用抽象类扩展HtmleElement

Dart:使用抽象类扩展HtmleElement,dart,Dart,我试图用以下设计模式编写一些东西: void main() { document.registerElement('abs-test', Test); TestExtend test = new TestExtend(); document.body.append(test); } abstract class Test extends HtmlElement { Test.created() : super.created(); factory Te

我试图用以下设计模式编写一些东西:

void main() 
{
    document.registerElement('abs-test', Test);
    TestExtend test = new TestExtend();
    document.body.append(test);
}

abstract class Test extends HtmlElement
{
    Test.created() : super.created();
    factory Test() => new Element.tag('abs-test')..text = "test";
}

class RedTest extends Test
{
    TestExtend() : super() => style.color = 'red';  
}
我的目标是创建一个注册到抽象类“Test”的定制HtmleElement。这个抽象类“Test”将具有一些类型Test的所有元素都需要具备的属性。在本例中,类型测试的所有元素都需要将单词“Test”作为其文本

然而,我希望只允许用户创建具有更具体属性的“Test”子类。在本例中,我们有RedTest,它将Test的颜色设置为红色。生成的HTML将是:

<abs-test style="color:red;">test</abs-test>
测试
我对此有两个问题:

1) 可以调用父类的工厂构造函数吗?(如果没有,是否可以以不需要工厂构造函数的其他方式扩展HtmleElement)

2) 可以用抽象类扩展HtmleElement吗


我已经测试了一段时间,与不同的构造函数,但无法使其工作。有人能提供建议吗?

您可以向类注册一个标记,以便浏览器可以为您实例化它。如果这不是1:1关系,浏览器就无法知道要实例化哪个类

所以

你需要

  • 每个类都有不同的标记
  • 用一个具体(非抽象)类注册每个标记
您通常可以在抽象类的工厂构造函数中调用子类的构造函数

factory Test() => new RedTest()..text = "test";
在Dart中有效,但因为扩展元素需要返回

new Element.tag('abs-test')
这不起作用,因为您不能同时返回两个

您需要用不同的标记注册每个具体的子类,如

document.registerElement('abs-test-red', TestRed);
document.registerElement('abs-test-blue', TestBlue);

谢谢-这是合乎逻辑的。当扩展本机html元素时,请稍微注意,html中的这些实例是用
is
属性指定的。假设
MyButton
继承自
ButtonElement
,则html中的一个实例由
指定,我第一次调试时用了几个小时实现了这一点…:-)哈哈,我刚刚看到了这个-有同样的问题。希望我能早点回来查看评论!