2017-07-20 7 views
2

抽象クラスでのHTMLElementを拡張:これでダート:私は、次のデザインパターンで何かを書き込もうとした

​​

私の目的は、抽象クラス「テスト」に登録されたカスタムのHtmlElementを作成することです。この抽象クラス "Test"には、Test型のすべての要素に必要ないくつかのプロパティがあります。この例では、Test型のすべての要素はテキストとして "test"という単語を持つ必要があります。

しかし、私は、ユーザーがより具体的な性質を持つ「テスト」のサブクラスを作成できるように、その後たかったのです。この例ではRedTestを使ってTestの色を赤に設定しています。結果のHTMLは次のようになります。

<abs-test style="color:red;">test</abs-test> 

私はこれで2つの問題を抱えて:

1)それは親クラスの工場のコンストラクタを呼び出すことは可能ですか? )

2(ない場合は、工場出荷時のコンストラクタを必要としない別の方法でのHtmlElementを拡張することが可能である)、それは抽象クラスでのHtmlElementを拡張することは可能ですか?

私は別のコンストラクタでしばらくテストが、それを動作させることができませんされています。誰でも助言できる?

答えて

2

ブラウザはあなたのためにそれをインスタンス化できるように、クラスでタグを登録します。これが1:1の関係でない場合、ブラウザがインスタンス化するクラスを知る方法はありません。

したがって

あなたは

  • 、クラスごとに異なるタグ

    • を必要としますが、通常は、コンストラクタを呼び出すことができ、具体的な(非抽象)クラス

    で各タグを登録します抽象クラスのファクトリコンストラクタのサブクラスのクラス

    factory Test() => new RedTest()..text = "test"; 
    

    はダートでは有効ですが、要素を拡張すること

    new Element.tag('abs-test') 
    

    を返すために必要なので、あなたが、同時に両方を返すことができないので、これは、動作しません。

    あなたは

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

    おかげのような別のタグでそれぞれ具体的なサブクラスを登録する必要があります - 論理的です。 – SSS

    +1

    ネイティブのhtml要素を拡張するときに、少し頭が浮かびます。これらのhtmlのインスタンスは 'is'属性で指定されます。 'MyButton'は' ButtonElement'から継承し、次に 'htmlのインスタンスは'

    +0

    母、私ちょうどこれを見た - 同じ問題があった。もっと早くコメントを確認して欲しい! – SSS

    関連する問題