如何解决从 Wicket
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 中,这是模型 (IModel
)。 - 点击链接后,您更新模型
- 要更新标签,您需要将其添加到 AjaxRequestTarget。
- 不要忘记通过调用
.setOutputMarkupId(true)
来使标签 Ajax 可更新 - 通过使用
target.appendJavaScript(CharSequence)
,您可以将新计算的content
发送到浏览器
通过在两个组件之间共享模型来简单解决。
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));
}
}
,
匿名类可以访问其封闭类的成员。所以你可能会做这样的事情
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)));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。