Расширение базовой калитки HTML безтег - PullRequest
0 голосов
/ 16 октября 2019

Можно ли расширить существующую калитку (= добавить дополнительное свойство / текстовое поле в существующий html калитки), если базовая калитка не содержит тега <wicket:child/>?

Например, я хочу расширить некоторые javaкласс, который использует следующий html:

<wicket:panel>
  <div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
  [I WANT TO INJECT ANOTHER TEXTBOX HERE]
</wicket:panel>

Мой расширенный класс наследует все базовые свойства от унаследованного класса, и я объявил дополнительное свойство. Но я не знаю, смогу ли я / как добавить дополнительное свойство в базовый html без необходимости клонировать весь исходный html и добавить мою новую собственность, что не является элегантным решением.

Есть ли какое-либо событие, которое яможно прикрепить туда, где я могу изменить исходный HTML-код (добавить свое свойство) до его анализа / рендеринга?

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Вы можете переопределить метод #getMarkup() и изменить его результат, но это будет более хакерским, чем просто предоставление полного файла .html с вашими изменениями.

Предоставление собственного файла разметки совершенно элегантно для меня!

0 голосов
/ 27 октября 2019

Один из способов сделать это состоит в том, чтобы определить метод на вашей базовой странице, который возвращает фрагмент, который будет вставлен в 'childContent' ниже:

<wicket:panel>
  <div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
  <div wicket:id="childContent"></div>
</wicket:panel>

Таким образом, на вашей базовой странице у вас будет этофункция, которая по умолчанию возвращает ноль, но расширяющиеся страницы могут переопределить ее, чтобы предоставить свой собственный конкретный контент:

protected Fragment getChildContent() { return null; }

И ваша базовая страница будет использовать его следующим образом:

Fragment childContent = getChildContent();
        if(childContent != null) {
            addOrReplace(childContent);
        } else {
            addOrReplace(new WebComponent("childContent").setVisible(false));
        }

Чем вРасширяя свою страницу, вы можете определить фрагмент с его собственным html и переопределить метод getChildContent (), чтобы вернуть его. Надеюсь, это поможет!

...