javascript
  • aem
  • htl
  • 2017-12-12 39 views 0 likes 
    0

    私はAEMを初めて使う人です。現在、私たちはサイトの各ページに1つのテンプレートを持っています。すべてのコンポーネントはカテゴリ「project_name.components」を持っていると私は、ヘッダー・ファイル内のクライアントLIBSを呼び出しています:コンポーネントが存在するときに、コンポーネントのクライアントのlibファイルがページにのみロードされるようにする最良の方法は何ですか?

    <sly data-sly-call="${clientLib.css @ categories='project_name.components'}" /> 
    <sly data-sly-call="${clientLib.js @ categories='project_name.components'}" /> 
    

    しかし、私は、予想通り、すべてのページにないブレッドクラム・コンポーネントを持っていますが、それに関係なく、クライアントのlibsファイルが表示されていて、既存のデフォルトのブレッドクラムのスタイル/スクリプトに問題が発生します。

    私は、新しいbreadcrumbコンポーネントに "project_name.breadcrumbs"のテストカテゴリ名を与えました。ブレッドクラムがページにドラッグされている場合、ブレッドクラムクライアントのlibファイルのみを呼び出す同じヘッダーファイルのif/elseステートメントのいくつかのタイプで、このカテゴリ名を使用する方法はありますか?

    答えて

    1

    いくつかの考え:

    • 最も簡単な方法はどこか、それを含むのではなく、それを使用するコンポーネントの一部として、クライアントライブラリを含めることです。これの欠点は、ページのHEADセクションで早くロードしたいCSSが、BODYのどこかまで存在しないことです。
    • CSSスタイリングが影響しないものに影響を与えている場合は、CSSスタイリングには適用したくないものが壊れないように十分なセレクタが必要です。おそらく、ブレッドクラムにクラスを追加し、すべてのスタイルをクラスを持つタグの下にあるものにのみ適用するようにすることができます。この方法でCSSを変更した場合、ブレッドクラムを使用していないときにページに悪影響を及ぼすことはありません(ただし、ロードされてブラウザキャッシュされていない場合はページフットプリントが低下するという欠点があります)将来使用される)。
    • これ以外の場合は、ページレベルで実行されるロジックを追加して、ノードを調べ、含まれるコンポーネントを確認し、条件付きロジックを追加して、ページがコンポーネントを使用しているときにクライアントライブラリのみを追加できます。しかし、それはバックエンドの仕事です。だからあなたが示唆したようにif/elseステートメントを追加することはできますが、それを背後にコードを書くのはあなた次第です - 条件付きで私の知識にチェックを行う組み込み関数はありません。
    +0

    私は、あなたが示唆したように、コンポーネントのhtmlファイルでそれを呼び出すことを考えていましたが、それはおそらくベストプラクティスではありません。私はスタイルのための特定のセレクタを持っていますが、それはページ上の元のブレッドクラムと混乱しているjsファイルです。新しいブレッドクラムが存在する場合、既定のブレッドクラムを隠す機能がありますが、私は自分の機能を修正する必要があると思います。 –

    関連する問題