2010-11-17 73 views
2

我需要将一些非常复杂的动态HTML结构添加到我的Velocity模板中。如果我试图直接在模板中写这些,这将是一个绝对的混乱。Velocity中的Rails风格模板助手

让我解释一下我想要做的事情......比方说,在我的网站上,用户可以发表评论。而不是写了所有复杂的动态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的,有事情叫helpers它允许您从模板中基本上调用一个方法,该方法返回一个动态生成的HTML块,并将其嵌入到您调用它的模板中。关于助手的好处在于,您只会将CPU用于所使用的CPU。使用VelocityContext.put()方法,似乎必须提前生成所需的所有内容。这是一个问题,因为我最终会有大约50个不同的助手,我需要非程序员的网页设计师能够随意地将它们交换出来。

于是我问,

  1. 我可以做这样的事情与速度?
  2. 如果不是,我可以用其他模板引擎做这样的事吗?
  3. 有没有更好的方法来做我想做的事情?

回答

1

对不起,我没有用我的大脑提交这个。你要做的就是创建一个Helper类:在模板

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

然后:在庆祝

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

最后,dance the merengue with a dog

public class HtmlHelper { 

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

} 

然后添加一个实例到上下文。

+1

您可以使用VelocityTools让您的HtmlHelper自动实例化,并在您的模板中引用$ helper时将其放入上下文中。 – 2010-11-17 16:07:13

2

您是否考虑过(或您正在使用)Velocity Tools已经?我倾向于将它们看作与Rails助手非常类似,并且绝对是保持特定于视图的逻辑的最佳位置。根据具体的实现,你可以将你的助手作为自定义工具进行连线,然后让Tools框架无缝地管理实例化等。如果你的助手只是一个POJO,你可能会发现它已经作为一个工具而没有任何改变。另外,如果你的助手只是建立HTML结构,并没有任何复杂的Java依赖关系,也许你可以创建它们为macros

+1

并且使用VelocityTools 2,这些工具甚至在您使用它们之前都没有实例化。 – 2010-11-17 16:06:31