我是否可以使用现有的 Wicket 类在没有 (AJAX) 往返服务器的情况下启用/禁用该字段?即是否可以将行为添加到导致呈现的 HTML 包含启用/禁用字段的 JavaScript 的字段?
是的,你可以在没有服务器往返的情况下做到这一点。不,不是 Wicket 提供的课程,您必须自己创建。这是您可以添加到组件的行为。如果点击了具有这种行为的组件,那么在构造函数中传递的目标组件将通过 javascript 被禁用:
public class DisableFormComponentBehavior extends Behavior {
private Component sourceComponent;
private FormComponent targetComponent;
public DisableFormComponentBehavior(FormComponent targetComponent) {
targetComponent.setOutputMarkupId(true);
this.targetComponent = targetComponent;
}
public void bind(Component component) {
super.bind(component);
component.setOutputMarkupId(true);
this.sourceComponent = component;
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem
.forReference(JQueryResourceReference.get()));
response.render(OnDomReadyHeaderItem.forScript(String
.format("$('#%s').click(function(){$('#%s').prop('disabled', true);});",
component.getMarkupId(), targetComponent.getMarkupId())));
}
}
如果上述问题的答案是否定的:我自己在标记中添加所需的 JavaScript 代码是否“合法”?或者我是否冒着弄乱表单提交的风险,以至于 Wicket 无法正确识别它?
好吧,上述问题的答案不是“否”,但是将您自己的 javascript 添加到 Wicket html 文件中仍然是完全合法的。但是,您必须在 HTML 中定义组件的 ID。不过,我更喜欢 Behaviors 的解决方案,因为它更易于重用。