【问题标题】:Bind canvas element to new element将画布元素绑定到新元素
【发布时间】:2017-08-31 02:12:34
【问题描述】:

我想用 dart 创建我自己的元素继承画布。

这是我的 HTML 代码:

 <x-canvas> </x-canvas>

这是我的 DART 代码:

class XCanvas extends HtmlElement with CanvasElement{

    int myOwnProperty = 1;

    XCanvas.created() : super.created(){

    }

}

void main(){
    document.registerElement("x-canvas", XCanvas);

    var ctx = query("x-canvas").getContext('2d'); // ctx from x-canvas element
}

发生的错误:

main.dart:23 Exception: 'package:mypackage/main.dart': error: line 38 pos 2: constructor 'CanvasElement.internal_' is illegal in mixin class CanvasElement
}
 ^
'package:mypackage/main.dart': error: line 11 pos 37: mixin class 'CanvasElement' must not have constructors
class XCanvas extends HtmlElement with CanvasElement{
                                ^

【问题讨论】:

    标签: javascript html canvas dart


    【解决方案1】:

    自定义元素的类应该是

    import 'dart:html';
    
    class XCanvas extends CanvasElement{
      int myOwnProperty = 1;
    
      XCanvas.created() : super.created();
    }
    

    并注册

    document.registerElement("x-canvas", XCanvas, extendsTag: 'canvas');
    

    创建一个实例使用

    <canvas is="x-canvas"></canvas>
    

    var anchor = querySelector('#anchor');
    anchor.append(new Element.tag('canvas', 'x-canvas'));
    

    另见

    【讨论】:

    • 我赞成你已经很好的答案,但我只是想补充一点,is 语法之所以必要是因为&lt;canvas&gt;replaced element
    • @PatrickRoberts 谢谢 :) 你确定吗?据我所知,如果您依赖于特定本机标签的实现,则需要 is,例如 DartPad 示例中的 &lt;button is="x-button"&gt;&lt;input is="my-input"&gt;,...。如果没有 is="...",它将变为 @987654335 @ 继承了&lt;div&gt; 标签的实现。
    • 我不记得我在哪里读到它了,但我怀疑它是在最终确定之前对 Web 组件规范的 github 讨论中,所以它可能不完全准确,但我的理解是如果您从未替换的元素继承,则不需要使用is 语法。我不知道它只是从&lt;div&gt; 继承了实现。
    • &lt;div&gt; 从技术角度来看可能不是 100% 准确,默认行为是 就像 &lt;div&gt; 元素具有不同的标签名称(他们可以也只是扩展相同的内部类或类似的)。我确信您需要 is 来输入 &lt;button&gt;&lt;input&gt; 这样的输入元素,在这些元素中无法使用自定义代码实现相同的行为(例如特定于表单的行为)。
    • 我刚刚检查了the specification。根据它,默认情况下,没有is 语法的自定义元素只是从HTMLElement 继承功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2017-10-10
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多