2016-12-30 4 views
1

でカスタムサブ要素を作成するための正しい方法:だから私は<a href="http://x-tag.github.io/" rel="nofollow noreferrer">x-tag web component library</a>は、あなたがこのようにHTMLで表示されるカスタム要素を作成できます知っているX-タグ

<x-my-custom-element>my content</x-my-custom-element> 

しかし、私は複数のカスタムを作成したい場合にはどのような

xtag.register('x-my-custom-element', {...}); 
xtag.register('x-my-custom-element-child', {...}); 
xtag.register('x-my-custom-element-grandchild', {...}); 
0:

<x-my-custom-element> 
    <x-my-custom-element-child> 
     <x-my-custom-element-grandchild></x-my-custom-element-grandchild> 
    </x-my-custom-element-child> 
</x-my-custom-element> 

がそうのように、単にxtag.register() 3回を呼び出すための正しい方法です。このようなサブ要素、

また、別の要素の子であるサブ要素を強制的に使用する方法はありますか?言い換えれば、これは動作します:

<x-my-custom-element-parent> 
    <x-my-custom-element-child></x-my-custom-element-child> 
</x-my-custom-element-parent> 

が、これはないでしょう:

<x-my-custom-element-child> 
    <x-my-custom-element-parent></x-my-custom-element-parent> 
</x-my-custom-element-child> 

答えて

3

機能、属性、デフォルトのコンテンツ、シャドーDOMなどを追加する必要がある場合は、カスタム要素名が有効(ダッシュ "-文字)であるため、xtag.register()で登録する必要があります。認識できない要素有効な名前は単にHTMLElementのオブジェクトになります。認識されず、無効な名前の要素はHTMLUnknownElementオブジェクトになります。

// valid custom element name 
document.createElement('foo-bar') instanceof HTMLElement; // true 

// invalid custom element name 
document.createElement('foobar') instanceof HTMLUnknownElement; // true 

WHATWG Spec for HTMLUnknownElement hereを読むことができます。

私は要素階層を強制する方法がわかりません。標準的なHTML要素はこれを強制しません。たとえば、<li><ul></ul></li>と​​とすることができます。このように不適切に使用された場合、要素は単に機能しません。

+0

ありがとうございます。私はxタグによって私が何を参照していたのか分かりませんでしたので、質問を更新しました。 * forceful *準拠に関しては、サブ要素が不適切に使用されているときに 'console.warn 'したいと思います。しかし、私はこれをxタグ内で行うための機能を実装できると思います。 –

+1

@ ObinwanneHill 'inserted'ライフサイクル関数の' parentNode'の 'tagName'を見て、期待通りでない場合は' console.warn() 'を実行することができます: xtag.register { ライフサイクル:{ inserted(){ if( 'custom-parent'!== this.parentNode.tagName.toLowerCase()) コンソール。あなたは正確に私が思っていたことです。(正確には、の子であるべきです) } } } – jpec

+0

ありがとう。 –

1

あなたは同じプロトタイプを持つ3種類のカスタム要素を登録することはできません。

だからObject.create()で、たとえば、3種類のプロトタイプを作成する必要があります:

protoChild = Object.create(protoParent) 
protoGrandchild = Object.create(protoChild) 

次にregsiter()メソッドを呼び出します。あなたの2番目の質問については

、あなたは要素がを添付を作成したときに、自分でカスタム要素の内容を制御する必要があります。

+0

私は[x-tag](http://x-tag.github.io/)のWebコンポーネントライブラリ(更新を参照)を参照していました。私はあなたの答えがそれにどのように適合するかについてはあまりよく分かりません。 –

関連する問題

 関連する問題