Я хочу использовать BorderBehavior для добавления дополнительной разметки вокруг различных компонентов.
MyBorderBehavior extends BorderBehavior {
}
<wicket:border>
<div class="myBorderBehavior">
<wicket:body />
<!-- some more HTML code -->
</div>
</wicket:border>
Итак, в какой-то момент я добавляю новый компонент MyBorderBehavior к компоненту.
MyComponent myComponent = new MyComponent().add(new MyBorderBehavior());
Но когда я хочу обновить свой компонент через ajax
ajaxRequestTarget.add(myComponent)
HTML-разметка MyBorderBehavior отрисовывается снова, не удаляя уже существующую разметку MyBorderBehavior в DOM. В результате разметка MyBorderBehavior отображается в браузере дважды или чаще.
Как я могу добавить рамку к компоненту, который может быть повторно обработан с помощью ajax?
Рабочее решение, которое я нашел до сих пор, - это удалить разметку MyBorderbehavior вручную через JavaScript:
MyBorderBehavior extends BorderBehavior {
@Override
public void onComponentTag(Component component, ComponentTag tag) {
super.onComponentTag(component, tag);
IValueMap attributes = tag.getAttributes();
attributes.put("class", attributes.getString("class", "") + " hasMyBorderbehavior");
}
}
Wicket.Event.subscribe('/dom/node/removing', function(a, attributes, c, d, e) {
var component = $('#' + attributes['id']);
if (component.hasClass("hasMyBorderbehavior"))
{
component.closest(".myBorderBehavior").replaceWith(component);
}
});
Но это, кажется, очень смешно.
На данный момент я нашел три случая, которые актуальны для меня:
- Компонент с BorderBehavior перерисовывается через ajax
- Родительский компонент компонента с BorderBehavior перерисовывается через ajax
- Перерисована вся страница