Написание скрипта src динамически через калитку - PullRequest
1 голос
/ 29 ноября 2011

Я хочу, чтобы моя страница динамически загружала javascript в мое тело :

<script type= "text/javascript" src="this path should be decided from wicket dynamically"/>

Я использую калитку версии 1.4 , поэтому JavaScriptResourceReference не существует в моей версии (для моей проверки это не было ')

как я могу решить эту проблему?заранее спасибо:).

Ответы [ 3 ]

4 голосов
/ 29 ноября 2011

Я указываю свой комментарий в ответ.

Вы можете использовать этот фрагмент кода:

WebMarkupContainer scriptContainer = new WebMarkupContainer("scriptContainer ");
scriptContainer .add(new AttributeAppender("type", Model.of("text/javascript")));
scriptContainer .add(
    new AttributeAppender("src", urlFor(
        new JavaScriptResourceReference(
            YourClass.class, "JavaScriptFile.js"), null).toString()));
add(scriptContainer );

и соответствующий html:

<script wicket:id="scriptContainer "></script>

Просто изменитестрока JavaScriptFile.js для загрузки любого другого файла Javascript.

3 голосов
/ 29 ноября 2011

JavascriptPackageResource.getHeaderContributor() делает именно то, что вам нужно.

Вам ничего не нужно в разметке, просто добавьте HeaderContributor, которое он возвращает на вашу страницу.

Обновление: Для Wicket 1.5 см. руководство по миграции , но оно выглядит так:

public class MyPage extends WebPage {
   public MyPage() {
   }
   public void renderHead(IHeaderResponse response) {
     response.renderJavaScriptReference(new PackageResourceReference(YuiLib.class,
       "yahoo-dom-event/yahoo-dom-event.js"));
     response.renderCSSReference(new PackageResourceReference(AbstractCalendar.class,
      "assets/skins/sam/calendar.css"));
   }
}

Если вы хотите поместить свой элемент <script> в тело, вы можете просто объявить его как WebMarkupContainer и добавить AttributeModifier, чтобы установить атрибут src. Хотя в этом случае wicket не будет генерировать относительные URL-адреса для вас, вам придется сделать это самостоятельно.

0 голосов
/ 29 ноября 2011

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

 <script type="text/javascript">
    function load_js() {
    var element = document.createElement("script");
    element.src = "scripts/YOUR_SCRIPT_SRC.js"; // <---- HERE <-----
    document.body.appendChild(element);
}

    // Wait for the page to be loaded

if(window.addEventListener)
    window.addEventListener("load",load_js,false);
else if(window.attachEvent)
    window.attachEvent("onload",load_js);
else
    window.onload = load_js;

</script>

Что я сделал здесь, это создал новый элемент script, а затем применилк этому его источник.Таким образом, вы можете динамически контролировать src.После этого я добавляю его в тело.

Последняя часть есть, поэтому новый элемент применяется только после загрузки страницы.

...