Wicket Checkbox onUpdate не вызывается при изменении состояния проверки JQuery

У меня есть таблица данных, в которую я добавил панель, в которой есть флажок в ячейке. У меня есть другая панель с флажком, который я использую для выбора всех флажков в таблице данных. Выбрать все выполняется JQuery, а JQuery находится в коде ниже. Как я могу вызвать событие onclick или onchange, когда установлен флажок JQuery Select All? Я пытался использовать AjaxCheckBox ниже, но событие не вызывается.

    private static List<CheckBox> checkBoxes = new ArrayList<CheckBox>();
    private static class ActionsPanel extends Panel {

    public ActionsPanel(String id, IModel<WorkOrderCustomer> model, final String uuid ) {
        super( id );

        AjaxCheckBox checkBox = new AjaxCheckBox("checkbox", Model.of(Boolean.FALSE)) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onComponentTag(ComponentTag tag) {
                super.onComponentTag(tag);
                tag.append("class", uuid, " ");
            }

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                if( getModelObject() == true ) {
                    checkBoxes.add(this);
                } else {
                    checkBoxes.remove(this);
                }
            }
        }; 
        add( checkBox );
    }
}
    private static class ActivityPanel extends Panel {

    private final String selectCheckboxJS = "if($(this).attr('checked') == 'checked') {var val=true;} else {var val=false;}$('." + 
                                uuid + "').each(function() { $(this).attr('checked', val); });"
    private static final long serialVersionUID = 1L;
    @Inject
    private Dao dao;
    private DropDownChoice<String> activities;

    public ActivityPanel(String id, final String selectCheckboxJS, FilterForm form) {
        addActivitySwitchPanel(selectCheckboxJS, form);
    }

    private void addActivitySwitchPanel(final String selectCheckboxJS, FilterForm form) {

        CheckBox checkAll = new CheckBox("checkAll"); 
        checkAll.add(new ChangeActivitySearchBehavior() {
            @Override
            public void onComponentTag(Component component, ComponentTag tag) {
                tag.put("onclick", selectCheckboxJS);
            }
        });

        SubmitLink changeActivityLink = new SubmitLink("activityLink", form);
        add( checkAll );
        add( changeActivityLink );
    }
}

person Chris    schedule 10.06.2016    source источник


Ответы (1)


Вместо того, чтобы просто изменить значение атрибута checked, вы можете $(this).trigger('click') установить флажки.

Также взгляните на компонент org.apache.wicket.markup.html.form.CheckGroupSelector.

person martin-g    schedule 11.06.2016
comment
Спасибо за это. Я был настолько сосредоточен на мысли, что мне придется решать эту проблему с помощью калитки, что даже не подумал попробовать jQuery. Я изучил GroupSelector, когда изначально проектировал это, но из-за того, как мы структурировали класс, у меня не было прямого доступа к этим флажкам, не пройдя какой-то причудливый редизайн. - person Chris; 13.06.2016