2016-03-21 3 views
1

Скажем, у меня есть шаблон в гальке или freemarker (два двигателя, которые я рассматриваю, используя). Это может выглядеть примерно так:ленивая оценка переменных/интерполяций для Pebble/Freemarker

<Node> 
    <Element attribute="{{ VAR_A }}"/> 
    <Element attribute="{{ VAR_F }}"/> 
    <Element attribute="{{ VAR_N }}"/> 
</Node> 

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

Однако для генерации модели данных мне нужно знать, какие переменные вычислять значения для. У меня много данных. Я не хочу вычислять все VAR_A, VAR_B, VAR_C, VAR_D, VAR_E и т. Д., Если они не будут использоваться.

Есть ли способ в обоих этих двух механизмах для получения списка необходимых переменных перед выполнением шаблона? Способ сделать ленивую оценку каждого значения атрибута

Редактировать: Я не знаю, как будет выглядеть шаблон, когда я должен его оценить, поскольку он будет определен пользователем. Даже переменные, которые они предоставляют, будут определяемыми пользователем строками - поэтому мне нужно получить (и проанализировать) их, прежде чем я смогу предоставить данные.

+0

Вы спрашиваете, может ли ваша модель делать ленивую оценку значений атрибутов? – Raedwald

+0

По существу, да. – AdamBourke

ответ

0

Каждый тип документа, который вы создаете с использованием Freemarker, будет иметь свой собственный шаблон. Каждый шаблон будет иметь набор, если он использует переменные. В коде Java вы указываете Map, который отображает имена переменных в значения. Если у вас есть другой метод Java, соответствующий каждому шаблону, эти методы могут настроить наименьшую необходимую карту для этого шаблона. Эта карта не обязательно должна быть HashMap; в теории вы могли бы написать свою собственную реализацию интерфейса Map, который сделал ленивую оценку в своих методах get и values (и т. д.). Но это почти наверняка больше проблем, чем того стоит. Значения на карте, которые вы предоставляете, не обязательно должны быть String объектов; Freemarker будет использовать метод toString для каждого объекта, что дает своего рода ленивую оценку.

+0

В этом случае я не буду знать, как выглядит шаблон заранее, и они могут быть разными для каждого пользователя. Переменные в шаблоне будут определяться пользователем, поэтому в любом случае мне нужно будет посмотреть каждый из них. Я могу переопределить HashMap, если нужно, но я надеялся, что есть способ предварительно оценить шаблон, чтобы получить список переменных. – AdamBourke

+0

Это не имеет смысла. Если tempkates определены пользователем, пользователи программируют систему, а не вы. Вы не хотите этого делать. – Raedwald

+0

Программное обеспечение обеспечивает большую настраиваемость для пользователей. Идея состоит в том, что они могут писать свои собственные шаблоны, и мы будем заполнять данные в нашей системе. Используемые переменные будут определены в другом месте в системе. Это очень то, что мы хотим сделать. – AdamBourke