Mustache:如何在java中创建自定义帮助函数

时间:2014-03-20 05:36:53

标签: java spring-mvc mustache

我正在使用Mustache Template Engine in Java Spring mvc 3 + Maven,模板正常呈现,但现在我想为我的网站添加一些自定义功能。假设我有300个字符,现在我只想显示50个字符,因此需要truncate文本,截断后内容以...结尾。所以为此,我必须创建一些自定义功能。所以我很困惑,我需要如何以及在哪里创建自定义帮助函数。我可以在标签内部的HTML页面上创建这些类型的函数,或者我必须在java类文件上创建函数。请给我一些建议。 HTML模板:

<ul>
{{#items}}
    <li>{{name}} : {{detail}}</li>
{{/items}}
<ul>

Javascript截断功能

 function truncate(str) {
      console.log(str);
      if (str.length > 40) {
          return str.slice(0, 40) + "...";
      } else {
          return str;
      }
  }

2 个答案:

答案 0 :(得分:0)

您可以在Mustache中使用函数。

_html=mustache.render(mytemplate,
      {rows:therows,
       nametruncated: function() {return 'hello from m'}
      );

在您的模板中,您可以使用:

<div>{{nametruncated}}</div>

现在您可以使用计数器值:

_html=mustache.render(mytemplate,
          {rows:therows,
           nametruncated: function() {
               //you get the right member of you array 
               str=yourarray[counter]['mystring']
               if (str.length > 40) {
                  return str.slice(0, 40) + "...";
               } else {
                  return str;
               } 
       });

在模板中

{#行}

{{aproperty}}</br>
{{nametruncated}}

{/行}

答案 1 :(得分:0)

我个人喜欢...

 private static class Scope {
        public String name;

        public Function<String, String> capitalize() {  // the magic is here
            return return (obj) -> ("_" + obj + "_").toUpperCase();
        }
}

public String renderTemplate() {
        MustacheFactory mf = new DefaultMustacheFactory();
        Mustache mustache = mf.compile("template.mustache");
        StringWriter stringWriter = new StringWriter();
        Scope scope = new Scope();
        scope.names = "boris";
        mustache.execute(stringWriter, scope);
        return stringWriter.toString();
    }

带有模板。

{{#capitalize}} {{ name }} {{/capitalize}}