检票口复选框AttributeAppender(wicket checkbox AttributeA

2019-10-16 16:26发布

在我的工作有一个正常的一个代码(没有AJAX) checkbox ,而我想追加的JavaScript onchange事件,它喜欢:

checkbox.add(new AttributeAppender("onchange", Model.of("func(this);"), ""));

还有一个AjaxEventBehavior("onclick")添加到该checkbox

必须由被调用的函数onchange事件被称为只有一次,即使我检查并取消checkbox多次。 我猜测这与在“AJAX”的“onClick”事件有关。

如何使func(this)称为每当checkbox选中或取消选中?

谢谢

Answer 1:

可能是你可以打电话给你的func(this); 功能作为AjaxEventBehavior. getPreconditionScript() AjaxEventBehavior. getPreconditionScript()getSuccessScript()的,而不是添加和AttributeAppenderonchange事件。

看看http://wicket.apache.org/apidocs/1.5/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.html#getPreconditionScript ()

AjaxEventBehavior将类似于此:

new AjaxEventBehavior("onclick") {

     protected void onEvent(AjaxRequestTarget target) {
             System.out.println("ajax here!");
     }

     protected CharSequence getSuccessScript() {
             return "func(this);";
     }
}


Answer 2:

至于我对对方的回答意见,这里是我建议使用AjaxCallDecorator

new AjaxEventBehavior('onclick'){
    protected void onEvent(AjaxRequestTarget target) {
      //call your onclick handling logic here
    }

    protected IAjaxCallDecorator getAjaxCallDecorator(){
      return new IAjaxCallDecorator(){
         public CharSequence decorateScript(Component component,
                        CharSequence script){
            //prepend your javascript call to ajax server call
            return "func(this);"+script;
         }
         public CharSequence decorateOnSuccessScript(Component component,
                                 CharSequence script){
            return script;
         }
         public CharSequence decorateOnFailureScript(Component component,
                                 CharSequence script){
            return script;
         }
      };
    }
}


文章来源: wicket checkbox AttributeAppender