Помощники шаблонов в стиле Rails в Velocity - PullRequest
2 голосов
/ 17 ноября 2010

Мне нужно добавить несколько действительно сложных динамических HTML-структур в мой шаблон Velocity. Если бы я попытался написать это прямо в шаблоне, это было бы полным беспорядком.

Позвольте мне объяснить, что я пытаюсь сделать ... скажем, на моем сайте пользователь может оставлять комментарии. Вместо того чтобы писать всю сложную динамическую HTML-структуру, которая входит в таблицу комментариев и форму публикации, я хотел бы иметь возможность сделать это в моем шаблоне:

<div>
    // call to a method that generates the comments table
</div>
<div>
    // call to a method that generates the comments form
</div>

В Ruby On Rails есть вещи, называемые помощниками , которые позволяют из шаблонов вызывать, в основном, метод, который возвращает динамически генерируемый фрагмент HTML, который будет встроен в шаблон именно там, где вы это называете. Хорошая вещь о помощниках заключается в том, что вы тратите процессор только на те, которые используете. При использовании метода VelocityContext.put() создается впечатление, что мне нужно заранее сгенерировать все, что мне нужно. Это проблема, потому что в конечном итоге у меня будет около 50 различных помощников, и мне нужен веб-дизайнер, не являющийся программистом, который сможет менять их по своему усмотрению.

Итак, я спрашиваю,

  1. Могу ли я сделать что-то подобное с Velocity?
  2. Если нет, могу ли я сделать что-то подобное с другим движком шаблонов?
  3. Есть ли лучший способ сделать то, что я пытаюсь сделать?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

Вы уже рассматривали (или используете) Velocity Tools уже?Я склонен считать их довольно похожими на помощников по Rails и определенно лучшим местом для сохранения логики для конкретного вида.В зависимости от конкретной реализации, вы можете посмотреть на проводку в вашем помощнике как на собственный инструмент, а затем позволить инфраструктуре инструментов легко управлять созданием экземпляра и т. Д. Если ваш помощник - просто POJO, вы можете обнаружить, что он уже работает как инструмент без каких-либо изменений.

В качестве альтернативы, если ваши помощники только строят структуру HTML и не имеют каких-либо сложных зависимостей Java, возможно, вы могли бы просто создать их как макрос ?

1 голос
/ 17 ноября 2010

Извините, я отправил это без использования моего мозга.Все, что вам нужно сделать, это создать класс Helper:

public class HtmlHelper {

    public String getSomeHtml() {
        return "<p>badgers</p>";
    }

}

Затем добавить экземпляр в контекст:

VelocityContext context = new VelocityContext();
HtmlHelper helper = new HtmlHelper();
context.put("helper", helper);

Затем в шаблоне:

<div>
    $helper.getSomeHtml()
</div>

Наконец, танцует меренге с собакой на праздновании.

...