[英]Access variable from inner onClick method in outer class in Wicket
我有一个看起来像这样的 class
private static class LinkTest extends WebMarkupContainer {
public LinkTest(String id) {
super(id);
AjaxLink<Object> link = new AjaxLink<>("link") {
@Override
public void onClick(AjaxRequestTarget target) {
String content = //... some function call
}
};
add(link);
// .. how to access "content" variable here
link.add(new Label("label", Model.of(content)));
add(new AttributeAppender("onclick",
new Model(format("alert('%s');", contentModel)), ";"));
}
}
我想访问 LinkTest 构造函数中的“内容”变量。 任何想法如何做到这一点?
private static class LinkTest extends WebMarkupContainer {
public LinkTest(String id) {
super(id);
// 1
IModel<String> contentModel = Model.of("initial value");
AjaxLink<String> link = new AjaxLink<>("link", contentModel) {
@Override
public void onClick(AjaxRequestTarget target) {
// 2
contentModel.setObject("a new value");
// 3
target.add(this.get("label"));
// 5
target.appendJavaScript("alert('"+contentModel.getObject()+"');");
}
};
add(link);
Label label = new Label("label", contentModel);
link.add(label);
//4
label.setOutputMarkupId(true);
}
}
content
使用一个可共享的容器。 在 Wicket 中,这是 model ( IModel
)。.setOutputMarkupId(true)
来更新 Label Ajaxtarget.appendJavaScript(CharSequence)
您可以将新计算的content
发送到浏览器通过在两个组件之间共享 model 即可轻松解决。
private static class LinkTest extends WebMarkupContainer {
public LinkTest(String id) {
super(id);
IModel<String> contentModel = ()-> /* some function call */;
AjaxLink<String> link = new AjaxLink<>("link", contentModel) {
@Override
public void onClick(AjaxRequestTarget target) {
target.add(this);
target.appendJavaScript("alert('"+getModelObject()+"');");
}
};
add(link);
// .. how to access "content" variable here
link.add(new Label("label", contentModel));
}
}
一个匿名的 class 可以访问其封闭的 class 的成员。 所以你可能会做这样的事情
private static class LinkTest extends WebMarkupContainer {
//Here!
String content;
public LinkTest(String id) {
super(id);
AjaxLink<Object> link = new AjaxLink<>("link") {
@Override
public void onClick(AjaxRequestTarget target) {
content = //... some function call
}
};
add(link);
// .. how to access "content" variable here
link.add(new Label("label", Model.of(content)));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.