【问题标题】:Rails-style template helpers in VelocityVelocity 中的 Rails 样式模板助手
【发布时间】:2010-11-18 07:08:32
【问题描述】:

我需要在我的 Velocity 模板中添加一些非常复杂的动态 HTML 结构。如果我要尝试直接在模板中编写这些内容,那将是一团糟。

让我解释一下我要做什么...假设,在我的网站上,用户可以发布 cmets。我希望能够在我的模板中执行此操作,而不是编写进入 cmets 表和发布表单的所有复杂的动态 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。使用VelocityContext.put() 方法,似乎我必须提前生成我需要的一切。这是一个问题,因为我最终将拥有大约 50 个不同的助手,并且我需要非程序员网页设计师能够随意交换它们。

所以我问,

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

【问题讨论】:

    标签: templates velocity html-helper view-helpers


    【解决方案1】:

    您是否考虑过(或正在使用)Velocity Tools?我倾向于将它们视为非常类似于 Rails 助手,并且绝对是保留视图特定逻辑的最佳位置。根据具体的实现,您可以将帮助程序中的接线视为自定义工具,然后让工具框架无缝管理实例化等。如果您的帮助程序只是一个 POJO,您可能会发现它已经作为工具工作而无需任何更改。

    或者,如果您的助手只是构建 HTML 结构并且没有任何复杂的 Java 依赖项,也许您可​​以将它们创建为 macros

    【讨论】:

    • 在 VelocityTools 2 中,这些工具在您使用之前甚至不会被实例化。
    【解决方案2】:

    抱歉,我提交此内容时未动脑筋。您所要做的就是创建一个 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>
    

    最后,dance the merengue with a dog 庆祝一下。

    【讨论】:

    • 当您在模板中引用 $helper 时,您可以使用 VelocityTools 让您的 HtmlHelper 自动实例化并放入上下文中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2015-01-06
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多