为 Wicket 实现 javascript 事件

2022-01-24 00:00:00 slider jquery ajax java wicket

我是 ria-development 的新手,并且正在使用 Ajax 滑块示例.我不知道如何使用 javascript 事件.在此示例中,onValueChanged 事件是预先实现的.如何实现说 onchange- 或 onSlider-event?

I'm new to ria-development and working with the Ajax Slider example. I can't figure out how to work with javascript events. Here in the example the onValueChanged-event is preimplemented. How do I implement say onchange- or onSlider-event?

非常感谢所有帮助!

public abstract class AjaxSlider extends WebMarkupContainer {

    private static final long serialVersionUID = 1L;

    public AjaxSlider(String id) {
            super(id);
            super.setOutputMarkupId(true);
    }
    public JQUIComponentBehaivor<SliderOptions> getSlideBehaviors() {
        List behaviors = getBehaviors();
        for(Object behavior : behaviors){
            if(behavior instanceof SliderBehavior)
                        return (SliderBehavior) behavior;
        }
        return null;
    }


    public abstract void onValueChanged(AjaxRequestTarget target,
                    int newValue);

    @Override
    protected void onInitialize() {
            super.onInitialize();
            AbstractDefaultAjaxBehavior ajaxBehavior =
                new AbstractDefaultAjaxBehavior() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected void respond(AjaxRequestTarget target) {
                            String sliderValue = RequestCycle.get().getRequest()
                                            .getParameter("sv");
                            if (Utils.isNotBlank(sliderValue)) {
                                    onValueChanged(target, Integer.valueOf(sliderValue));
                            }
                    }
            };
            super.add(ajaxBehavior);
            super.add(new SliderBehavior(new SliderOptions()
                            .changeEvent(wicketAjaxGet(
                                            ajaxBehavior,
                                            new MapBuilder<String, Object>().add("sv",
                                                            js("ui.value")).build()))));
    }

}

推荐答案

您给出的示例为更改事件添加了一个事件处理程序.这个事件处理程序所做的是向上面定义的 ajaxBehavior 发出 GET 请求.然后该行为从 GET 参数中提取滑块值并调用 onValueChanged.

The example you gave adds an event handler for the change event. What this event handler does is issueing a GET request to the ajaxBehaviordefined above. The behavior then extracts the slider value from the GET parameters and calls onValueChanged.

您可以像这样向 SliderOptions 添加另一个事件处理程序.例如:

You can add another event handler just like this to SliderOptions. For instance:

.slideEvent(
    wicketAjaxGet(ajaxBehavior,
                  new MapBuilder<String, Object>()
                  .add("sv",  js("ui.value")).build()))));

此处理程序应在用户移动滑块时调用 ajax 行为.

This handler should call the ajax behavior any time the user moves the slider.

相关文章