我希望我的网页动态加载javascript到我的 正文 :
<script type= "text/javascript" src="this path should be decided from wicket dynamically"/>
我正在使用wicket 版本1.4 因此我的版本中不存在JavaScriptResourceReference (对于我的检查,它不是')
我该如何解决这个问题? 提前谢谢:)。
答案 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
。之后我把它贴在身上。
最后一部分就是这样,只有在加载页面后才会应用新元素。