この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

DOM のアクセスコンテインメント

コンポーネントは、DOM をトラバースして、同じ名前空間内のコンポーネントで作成された要素にアクセスすることしかできません。この動作により、他の名前空間内のコンポーネントで所有される DOM 要素にアクセスするアンチパターンを回避できます。

これは、カプセル化が壊れ、名前空間に関係なく別のコンポーネントにアクセスするコンポーネントについてのアンチパターンです。Locker Service では、クロス名前空間アクセスのみが防止されます。独自の名前空間内のクロスコンポーネントアクセスを防ぐことで、コンポーネントが緊密に連動し、問題が発生する可能性が低くなります。

メモ

DOM コンテインメントを表すサンプルコンポーネントを見てみましょう。

c:domLocker コンポーネントは、<div> 要素と lightning:button コンポーネントを作成します。

次に、DOM 内でピークするクライアント側コントローラを示します。

有効な DOM アクセス

要素が c:domLocker によって作成されるため、次のメソッドは有効な DOM アクセスです。

cmp.getElements()
コンポーネントによって表示される DOM 内の要素を返します。
cmp.find()
aura:id 属性によって識別される、div およびボタンコンポーネントを返します。
cmp.find("div1").getElement()
c:domLocker が div を作成したときに、div の DOM 要素を返します。
event.getSource().get("v.name")
イベントをディスパッチしたボタンの名前を返します。この場合は、myButton です。

無効な DOM アクセス

lightning:button で作成された DOM 要素にアクセスするために cmp.find("button1").getElement() を使用することはできません。ボタンが lightning 名前空間にあり、c:domLockerc 名前空間にあるため、Locker Service は c:domLockerlightning:button の DOM にアクセスすることを許可しません。

cmp.find("button1").getElement() のコードのコメントを解除すると、エラーが表示されます。