限制Mustache.js标记呈现的字符数

时间:2012-01-13 14:07:12

标签: javascript mustache

Mustache中是否存在限制Mustache标记生成的字符数的方法?

例如

template = "<li>{{my_tag}}</li>"

data = {
    "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

现在当我渲染我的标签时,我想通过仅显示省略号后面的前10个字符来缩短长字符串。我研究了使用lambda函数(如Mustache文档中所述),如此......

template = "<li>{{#limitLength}}{{my_tag}}{{/limitLength}}</li>"

data = {
    "limitLength" : function() {
        return function(text) {
          return text.substr(0,10) + '...';
        }
      },
    "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

但遗憾的是{{my_tag}}标记未展开。 Mustache手册指出:

  

传递的文本是文本块,未经渲染。 {{tags}}不会   已经扩展 - lambda应该自己做。

..但我无法想象如何在不使用Mustache.to_html()函数的情况下执行此操作,并且当我尝试使用它时...

例如

data = {
    "limitLength" : function() {
        return function(text) {
          return Mustache.to_html(text,data).substr(0,10) + '...';
        }
      },
     "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

...它无声地失败(这里可能会责怪数据对象的递归使用)

有没有人知道任何其他方法来实现这一点而不诉诸javascript / jQuery函数,我想尽可能使用Mustache实现它。

1 个答案:

答案 0 :(得分:7)

您的函数实际上是通过两个参数调用的:未渲染的文本和render函数,可用于渲染文本,保留当前上下文。

data = {
    "limitLength" : function() {
        return function(text, render) {
          return render(text).substr(0,10) + '...';
        }
      },
     "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}