コンポーネント ID とダイアログ (または他のコンポーネント) ウィジェットの変数名について簡単な質問があります。
コンポーネント ID を同じコンポーネントのウィジェット変数名として使用することに問題はありますか?
例えば
<p:dialog id="dlgRelConsultasRealizadas" widgetVar="dlgRelConsultasRealizadas" .../>
コンポーネント ID とダイアログ (または他のコンポーネント) ウィジェットの変数名について簡単な質問があります。
コンポーネント ID を同じコンポーネントのウィジェット変数名として使用することに問題はありますか?
例えば
<p:dialog id="dlgRelConsultasRealizadas" widgetVar="dlgRelConsultasRealizadas" .../>
この JSF の部分は、基本的に次の HTML を生成します (厳密にはそうではありませんが、効果は同じです)。
<body>
<div id="dlgRelConsultasRealizadas">...</div> <!-- Component ID -->
<script>var dlgRelConsultasRealizadas = ...;</script> <!-- Widget var -->
</body>
Interner Explorer には、このアプローチに関する問題があります。理由は不明ですが、ID (および名前) によるすべての HTML 要素への変数参照でグローバルな JavaScript 名前空間を汚染します。したがって、基本的に、var dlgRelConsultasRealizadas
生成された HTML 出力の は、 の HTML 要素参照によってレンダリングがオーバーライドされた後<div>
です。ブラウザがその後、グローバル スコープで次のことを行っているかのようです。
dlgRelConsultasRealizadas = document.getElementById("dlgRelConsultasRealizadas");
これにより、すべての元のウィジェット var 関数が完全に使用できなくなります。これは、変数が、元のウィジェット var などの関数と同じ関数を持たないインスタンスをdlgRelConsultasRealizadas
参照しているためです。HTMLDivElement
show()
widgetVar
したがって、 (生成された) HTML 要素の ID または名前として使用されていない一意の値をに指定することをお勧めします。一般的な方法は、ウィジェット変数名の前に (または後ろに) 一貫したラベルを付けることです。例えばw_
。
<p:dialog id="dlgRelConsultasRealizadas" widgetVar="w_dlgRelConsultasRealizadas" .../>
更新: PrimeFaces 4.0 以降、特に上記の理由と、「サードパーティ ライブラリ」による「グローバル名前空間の汚染」が JavaScript の世界では悪い習慣と見なされているため、ウィジェット変数はグローバル スコープに挿入されなくなりました。PF()
これらは、関数を介してのみ使用できる PF4 以降です。
言い換えると、
<p:xxx ... widgetVar="foo">
は としては利用できなくなりましfoo
たが、 としてのみ利用できますPF('foo')
。このテーマに関する Hatam Alimam のブログも参照してください: Intro to PrimeFaces widgetVar .