Какое дизайнерское решение стоит за установкой Component.ouputMarkupId false по умолчанию? - PullRequest
2 голосов
/ 26 февраля 2010

В веб-платформе Apache Wicket каждый компонент возвращает значение false из getOuputMarkupId () по умолчанию .

Мне любопытно узнать причину. Дизайнерское решение позади.

Я использую компоненты ajax, и мне нужно обновить некоторые другие компоненты на странице. Чтобы сделать это, я должен установить setOutputMarkupId (true) для каждого компонента, который участвует в обновлении страницы ajax. Поскольку я интенсивно использую AJAX, я делал это очень часто. И это не очень удобно. Кроме " Лучший код - это вообще не код ".

Я могу справиться с этим следующим образом:

class MyApp extends Application {

   @Override
   public init() {

       Application.addComponentInstantiationListener(
            new  IComponentInstantiationListener() {

                   public void onInstantiation(Component component) {
                      component.setOutputMarkupId(true);
                      component.setOutputMarkupPlaceholderTag(true);
                   }

            }
       );

Но есть ли компромисс? Мне приходят на ум только компромиссы:

  • отображаемая страница (html) больше
  • есть некоторые издержки рендеринга (т. Е. Когда атрибуты id записываются в html)

Но у них только небольшой след.

Ответы [ 2 ]

4 голосов
/ 26 февраля 2010

Он не может забрать идентификаторы из .html (пока, он может в 1.5). Так что это переопределит те идентификаторы, которые вы можете использовать для css / js и т. Д.

0 голосов
/ 27 февраля 2010

Из памяти, я думаю, она не установлена ​​по умолчанию, она перезапишет любой существующий идентификатор dom, который может испортить ваш css, если вы используете селекторы dom id.

Если вы не видите эту проблему, значит, ваше решение кажется хорошим.

...