Калитка - Инициируйте компонент с загружаемой съемной моделью по событию щелчка - PullRequest
0 голосов
/ 29 апреля 2019

Я добавляю ChildPanel в конструктор Panel.При загрузке Panel дочерняя панель отображается с данными, возвращаемыми getData ().Ниже приведен код.

Панель

public Panel(String aId, IModel<String> model)
    {

        super(aId);

        this.model = model;
        childPanel = new ChildPanel(MID, LoadableDetachableModel.of(this::getData));

        childPanel.setOutputMarkupId(true);
        add(childPanel);

    }
LambdaAjaxButton button = new LambdaAjaxButton("button",
        (_target, _form) -> {

            //

        });

ChildPanel

 public ChildPanel(String aId, LoadableDetachableModel<String> loadableDetachableModel)

    {

        super(aId);

        childModel = loadableDetachableModel;

        component = new WebMarkupContainer(MID_COMPONENT_CONTAINER);
        component.setOutputMarkupId(true);
        add(component);

    }

Я хочу сделать так, чтобыChildPanel рендерится только тогда, когда я нажимаю кнопку и никогда раньше.Как мне определить такую ​​вещь в событии onClick?Также он не должен отображаться при инициализации.

1 Ответ

0 голосов
/ 29 апреля 2019

Если вы хотите избежать рендеринга компонента, вы можете попытаться скрыть дочернюю панель и сделать ее видимой, когда вы нажимаете кнопку AJAX.Вы также должны использовать LambdaModel вместо LoadableDetachableModel для ленивого вызова getData.Как то так:

public Panel(String aId, IModel<String> model)
{

    super(aId);

    this.model = model;
    childPanel = new ChildPanel(MID, LambdaModel.of(this::getData));
    childPanel.setVisible(false);


    childPanel.setOutputMarkupPlaceholderTag​(true);
    add(childPanel);

}
LambdaAjaxButton button = new LambdaAjaxButton("button",
    (_target, _form) -> {

        childPanel.setVisible(true);
        _target.add(childPanel);
    });
...