2015-02-01 2 views
2

У меня есть clientlibs с категорией abc. Он содержит несколько js-файлов, например.Clientlibs Qs Как исключить некоторые файлы js

abc 
    |-->JS 
    | |--->a.js 
    | |--->b.js 
    | |--->c.js 
    |-->js.txt[which have the paths of all three js files] 

Если я использую что-то вроде: <cq:includeClientLib js="abc" />. Сюда входят все мои js-файлы в моем скрипте. Но как я могу ограничить включение только двух. Эти 3 являются всего лишь примером, их может быть 10 или более. Кто-нибудь знает, как это может произойти, исключая создание новой папки clientlib.

Благодаря

ответ

2

Вы можете выполнить это требование использования тем функциональность clientlibs. Это потребует нескольких изменений в структуре clientlibs. Позвольте мне объяснить это тремя файлами js (a.js, b.js и c.js).

Предположим, что b.js не требуется все время, когда используются a.js и c.js. Вам нужно будет создать родительский clientlib с a.js и c.js. В то же clientlib создать папку темы и добавить второй clientlib с b.js [должны иметь ту же категорию, как родитель], структура должна выглядеть следующим образом:

clientlibs: { 
categories: [ 
    "themeParent" 
], 
jcr: primaryType: "cq:ClientLibraryFolder", 
js: { 
    jcr: primaryType: "nt:folder", 
    a.js: { 
     jcr: primaryType: "nt:file", 
     jcr: content: {} 
    }, 
    c.js: { 
     jcr: primaryType: "nt:file", 
     jcr: content: {} 
    } 
}, 
js.txt: { 
    jcr: primaryType: "nt:file", 
    jcr: content: { 
     //a.js and c.js 
    } 
}, 
themes: { 
    jcr: primaryType: "nt:folder", 
    themeb: { 
     categories: [ 
      "themeParent" 
     ], 
     jcr: primaryType: "cq:ClientLibraryFolder", 
     js.txt: { 
      jcr: primaryType: "nt:file", 
      jcr: content: { 
       //b.js 
      } 
     }, 
     b.js: { 
      jcr: primaryType: "nt:file", 
      jcr: content: {} 
     } 
    } 
} 
} 

Темы могут быть выборочно включена для clientlib с использованием флага includeClientLib с тегом themed.

<cq:includeClientLib js="themeParent"/>: будет включать в себя a.js, c.js и b.js

<cq:includeClientLib js="themeParent" themed="false"/>: будет включать в себя a.js и c.js

<cq:includeClientLib js="themeParent" themed="true"/>: будет включать в себя только b.js

Ссылки: How are themes applied in Adobe AEM?

+0

Отличная работа Sharath. Но это помогает в любом случае. Скажите несколько раз, что я хочу комбо a.js и b.js, а иногда и b.js и c.js, тогда этот подход не будет работать правильно? – Oliver

+0

@Oliver, этот уровень модульности не поддерживается.Почему бы не иметь разные категории в таких ситуациях. –

0

Вы можете удалить запись JS файл в «js.txt», Я.С. будет присутствовать в пути, но не будут включены как часть сч: включают

+0

, пожалуйста, включите образец кода. Будет лучше понять. –

+0

@AlbinJoseph: Я предполагаю, что такой логики кода нет, это концепция, которую я упомянул в своем вопросе. –

+0

@Girish Natashankar: Thats fine, но в каком случае клиентлиб имеет много js-файлов, которые необходимо добавить таким образом. Его не кажется хорошим решением, насколько я знаком с clientlibs. –

0

К лучшему о моих знаниях это невозможно. Все имена js-файлов, которые вы вводите в js.txt, будут включены, когда вы напишете этот оператор <cq:includeClientLib js="abc" /> в своем JSP.

Скажите, если вы хотите включить только два JS-файла в другой JSP, не создавая новый clientlib, единственный способ сделать это - включить вручную, используя полный путь.

как этот

<script src="/etc/designs/projectname/clientlibs/js/a.js"></script> 
<script src="/etc/designs/projectname/clientlibs/js/b.js"></script> 
Смежные вопросы