У меня есть две панели в калитке.
ParentPanel
и ChildPanel
Сценарий
ChildPanel
является компонентом ParentPanel
.Каждый раз, когда на родительской панели запускается определенное событие, я хочу добавить определенный javascript в ChildPanel
.
Рабочий раствор
ParentPanel.java
public class ParentPanel extends Panel
{
private static final long serialVersionUID = 4306746527837380863L;
private final ChildPanel childPanel;
public ParentPanel(String aId, IModel<AnnotatorState> aModel)
{
super(aId);
model = aModel;
// initially the Child panel is empty. passing empty model
childPanel = new ChildPanel("child-container", Model.of());
childPanel.setOutputMarkupId(true);
add(childPanel);
}
@OnEvent
public void onClickText(RenderEvent aEvent)
{
LOG.trace("Event Fired");
IPartialPageRequestHandler iPartialPageRequestHandler = aEvent.getRequestHandler();
Integer someData = getSomeData();
childPanel.setDefaultModel(Model.of(someData));
//I am trying to add the child panel to the ajax target to ensure rerendering of child panel.
iPartialPageRequestHandler.add(childPanel);
}
}
ChildPanel.java
public class ChildPanel extends Panel
{
private static final long serialVersionUID = -3849226240909011148L;
private static final Logger LOG = LoggerFactory.getLogger(ChildPanel.class);
private IModel<Integer> model;
public ChildPanel(String aId, IModel<Integer> aModel)
{
super(aId);
model = (aModel);
}
@Override
public void renderHead(IHeaderResponse aResponse)
{
super.renderHead(aResponse);
model = (IModel<Integer>) getDefaultModel();
if (model == null)
return;
Integer someData = model.getObject();
String someJavascript = createSomeJavascript(someData);
log.debug("Rendering Updated UI with the JS: ", javascript);
aResponse.render(OnDomReadyHeaderItem.forScript(javascript));
}
}
Очевидно, метод renderHead () вызывается каждый раз, когда childPanel добавляется в iPartialPageRequestHandler, и он выполняет мою работу по обновлению пользовательского интерфейса при каждом событии, запущенном вParentPanel
.
Задача
Однако мне сказали, что это не очень хорошая практика.Поскольку в этом случае JS добавляется в renderHead (), он заканчивается в исходном коде страницы, что становится громоздким при отправке (больших) данных JSON.Нужно найти хорошее место для присоединения JS к цели AJAX (возможно, render () или, возможно, лучше onRender () или onAfterRender ()), только если это возможно / выполнимо в Wicket.Из-за моих ограниченных знаний я не могу догадаться, как еще я могу реализовать сценарий.Любое другое (лучшее или возможное) решение приветствуется и приветствуется.
Спасибо.