Включить файлы JS на основе текущей страницы - PullRequest
1 голос
/ 03 марта 2011

На моей главной странице оболочки jsf есть следующее:

<head>
  <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8"/>
  <title>
    <ui:insert name="pageTitle" /> 
  </title>

  <a4j:loadScript src="resource://jquery.js" />
  <a4j:loadScript src="resource:///bla/html/js/base.js" />
  <a4j:loadScript src="resource:///bla/html/js/common.js" />
  <a4j:loadScript src="resource:///bla/html/js/inactivity.js" />
</head>

Теперь у меня есть новая страница на сайте, и она требует некоторых функций js.Поэтому я создал новый файл js, myNewJSFile.js

. Я хочу, чтобы он загружался только в том случае, если пользователь попадает на эту страницу, так что я не хочу добавлять его в мой список файлов в заголовке.Кроме того, я бы предпочел не включать его в начало моей новой страницы.

Мне нужно только одно место, где я могу определить, какие файлы загружать, основываясь на текущей странице.

Так что-товот так (псевдокод):

main jsf wrapper:

<head>
  <jsIncludes>
</head>

js включает файл:

<a4j:loadScript src="resource://jquery.js" />
<a4j:loadScript src="resource:///bla/html/js/base.js" />
<a4j:loadScript src="resource:///bla/html/js/common.js" />
<a4j:loadScript src="resource:///bla/html/js/inactivity.js" />

<if page == "myNewPage>
  <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" />
<elfeif ...>
...
</if>

Есть ли простой способ сделать это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

a4j:loadScript всегда помещает JavaScript в <head>, независимо от того, где вы его используете, вы ничего не должны делать.(документ не упоминает об этом по какой-то странной причине)

Итак, чтобы ответить на ваш вопрос: если вы используете <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" /> на странице, где вам это нужно, <script style="text/javascript" src="..." /> появится в <head>.

0 голосов
/ 03 марта 2011

Я бы лучше добавил <ui:insert> к <head> основного шаблона.

<head>
    ...
    <ui:insert name="headContent" />
</head>

Затем в шаблоне страницы просто определите дополнительный скрипт, который будет вставлен туда.

<ui:composition template="main.xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://??? can't tell from top of head :)"
>
    <ui:define name="headContent">
        <a4j:loadScript src="resource:///bla/html/js/myNewJsFile.js" />
    </ui:define>

    ...
</ui:composition>
...