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中的一个实例由
指定,我第一次调试时用了几个小时实现了这一点…:-)哈哈,我刚刚看到了这个-有同样的问题。希望我能早点回来查看评论!