【问题标题】:Implementing javascript events to Wicket为 Wicket 实现 javascript 事件
【发布时间】:2011-03-06 18:32:37
【问题描述】:

我是 ria-development 的新手,正在使用 Ajax Slider example。我不知道如何使用 javascript 事件。在此示例中,onValueChanged 事件是预先实现的。如何实现说 onchange- 或 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()))));
    }

}

【问题讨论】:

    标签: java jquery ajax slider wicket


    【解决方案1】:

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

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

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

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

    【讨论】:

    • +1 为您的答案,但请在下次缩进您的代码。顺便说一句,对于具有单个条目的地图,您可能需要使用 Collections.singletonMap(kay, value)
    • 哦,我刚刚意识到 MapBuilder 代码是 OP 自己的。没关系。
    • 谢谢!好的,现在我如何分离事件?现在我将这两个事件都传递给响应方法。
    • 你可以在一个单一的响应方法中处理这两个事件,即在这两种情况下都不传递查询参数“sv”,但改变和滑动的东西不同。或者,您可以添加第二个 AbstractDefaultAjaxBehavior 并将这个新行为传递给 slideEvent 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多