ajax - Wicket 口 6 : Howto inject a javascript function via AbstractDefaultAjaxBehavior?

标签 ajax wicket wicket-6

我有一个附加了 JavaScript 文件的页面。

JavaScript 有一个函数,最后应该调用一个由 Wicket 通过 AbstractDefaultAjaxBehavior 注入(inject)的函数。

JavaScript 看起来像这样:

function updateAmount(amount){
  // do some calculations on amount
  saveAmount(amount);
}

注入(inject)的函数应该是这样的:

function saveAmount(amount){
  Wicket.Ajax.post({
    u: '${callbackUrl}',
    dep: function(){
           return [{name:'amount','value':amount}];
         }
}

我遇到的问题是,当 updateAmount 调用 saveAmount 函数时,(控制台)日志指出“saveAmount”未定义。

如果我查看源代码,注入(inject)的函数在那里,但不是 JavaScript,而是 wicket 生成的“AJAX”JavaScript。

目标是在 JavaScript 中调用一个函数,该函数将调用由 Wicket 注入(inject)的函数,该函数使用 JavaScript 提供的参数执行 AJAX 调用。

如果有任何帮助,我将不胜感激。

最佳答案

基本上,您应该使用 updateAjaxAttributes()renderHead()在自定义中 AbstractAjaxBehaviour

详情请见此处:

<罢工> http://wickedsource.org/2013/01/07/rolling-your-own-ajax-behavior-with-wicket/

取自google缓存,相关代码(作者:Tom Hombergs):

public class MyAjaxBehavior extends AbstractDefaultAjaxBehavior {

@Override
protected void respond(AjaxRequestTarget target) {
RequestCycle cycle = RequestCycle.get();
WebRequest webRequest = (WebRequest) cycle.getRequest();
StringValue param1 = webRequest.getQueryParameters().getParameterValue("param1");
StringValue param2 = webRequest.getQueryParameters().getParameterValue("param2");
// do whatever you need with param1 and param2
}

@Override
public CharSequence getCallbackScript() {
String script = super.getCallbackScript().toString();
script = script.replace("\"PLACEHOLDER1\"", "param1Value");
script = script.replace("\"PLACEHOLDER2\"", "param2Value");
return script;
}

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getExtraParameters().put("param1", "PLACEHOLDER1");
attributes.getExtraParameters().put("param2", "PLACEHOLDER2");
}

@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
String script = "var param1Value = My.JavaScript.Module.calculate1();";
script += "var param2Value = My.JavaScript.Module.calculate2();";
script += getCallbackScript();
response.render(OnDomReadyHeaderItem.forScript(script));
}

}

关于ajax - Wicket 口 6 : Howto inject a javascript function via AbstractDefaultAjaxBehavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787875/

相关文章:

java - 使用 PageableListView 填充链接和部分时如何添加 anchor 链接?如何获取我的链接应指向的 "id"?

javascript - Wicket 口 6 : TextField cursor position moves when component updated

java - 在 Wicket 中特定构建的页面上显示日期

jquery - asp.net mvc 4中jquery ajax调用后的服务器端重定向

javascript - ajax 无法在购物车中单击

php - 如何在网站上嵌入谷歌财经历史图表?

java - wicket 树对 "not direct" child 有用吗?

java - 为什么我的 Wicket 面板在更改默认模型后不重新渲染?

forms - Wicket 口表格 "ServletRequest does not contain multipart content"

c# - 关于如何在 ASP.net 中拖放的建议