9

JSF では、JavaScript を複合コンポーネントに統合するための「正しい」「クリーンな」方法は何でしょうか? 私はUnobtrusive JavaScriptのファンであり、HTML を JS から CSS に分離しています。癖をできるだけ少なくするにはどうすればよいでしょうか。これは私が今までで一番気に入っているものです:

<composite:interface>
  // ...
</composite:interface>

<composite:implementation>
  // ...
  <script> initSomething('#{cc.clientId}'); </script>
</composite:implementation>    

私が好きではないのは、language Aを生成するために使用することlanguage Bです。基本的に、イベント ハンドラーなどについても同じことが言えます。私のお気に入りは、 を介してこれらのハンドラーをアタッチすること<insert favorite DOM JavaScript library here>です。これは可能ですか?この種の統合をどのように行うのですか?

4

1 に答える 1

9

HTML要素の性質が非常にユニークであるため、毎回IDで選択する必要があることに絶対に肯定的であるという条件で、あなたが得られる最高のものだと思います.

HTML 表現がそれほど一意でない場合( Facelets テンプレートまたはインクルード ファイルには、ヘッダー、メニュー、フッターなどのアプリケーション全体で一意の HTML 要素が含まれている可能性がありますが、単一のビューで複数回再利用できる複合コンポーネントが含まれていると想像できます) ? 私は一生想像できません)、一意のクラス名を使用して初期化をフックすることも検討できます。

例えば/resources/composites/yourComposite.xhtml

<cc:implementation>
    <h:outputScript library="composites" name="yourComposite.js" target="head" />
    <div id="#{cc.clientId}" class="your-composite">
        ...
    </div>
</cc:implementation>

/resources/composites/yourComposite.js(jQueryを使用していると仮定して)

var $yourComposites = $(".your-composite");
// ...

必要に応じて、それぞれの自動生成された HTML 要素 ID を次のように抽出できますjQuery.each()

$yourComposites.each(function(index, yourComposite) {
    var id = yourComposite.id;
    // ...
});
于 2012-09-27T17:53:25.817 に答える