通过wicket动态编写脚本src

时间:2011-11-29 15:50:12

标签: wicket

我希望我的网页动态加载javascript到我的 正文

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

我正在使用wicket 版本1.4 因此我的版本中不存在JavaScriptResourceReference (对于我的检查,它不是')

我该如何解决这个问题? 提前谢谢:)。

3 个答案:

答案 0 :(得分:4)

我将我的评论指定为答案。

您可以使用此代码段:

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文件。

答案 1 :(得分:3)

JavascriptPackageResource.getHeaderContributor()完全符合您的需要。

您的标记中不需要任何内容​​,只需添加返回页面的HeaderContributor即可。

更新:对于Wicket 1.5,请参阅migration guide,但它是这样的:

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,但您必须自己完成。

答案 2 :(得分:-1)

我不确定我完全理解。 如果您在页面加载后尝试创建脚本并将其附加到正文,则应该这样做:

 <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。之后我把它贴在身上。

最后一部分就是这样,只有在加载页面后才会应用新元素。