2012-01-13 11 views
2

によってレンダリング文字数は口ひげタグが生成する文字の数を制限するの口ひげのいずれかの方法はありますか?私は私のタグをレンダリングするときリミットMustache.jsタグ

例えば

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

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

は今、私は省略記号でfollwedのみ最初の10個の文字を示すことによって、長い文字列を省略したいと思います。私はそうのようなラムダ関数(口ひげのドキュメントに記載されているように)を用いに見...

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}}は が展開されていません - ラムダはそれを単独で行うべきです。

..しかし、私は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を使用して私はf可能です。現在のコンテキストを維持、レンダリングされていないテキストとテキストのレンダリングに使用することができますrender機能:

答えて

7

あなたの機能は、実際には2つの引数で呼び出されます。

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." 
} 
+1

あなたは正しいと思いますが、それはうまくいきます...しかし、それがどのように機能していたのですか? http://mustache.github.com/mustache.5.htmlにあるMustacheのドキュメントは、関数に渡されたこのレンダリングパラメータについては何も言及されていないため、不完全なようです。他のいくつかの徹底的なドキュメントがありますか?それともMustach.jsのlibを見てみましたか?いずれにしても、ドキュメントは本当に修正されるべきです。私はgithubに関する問題を作成しました。 https://github.com/defunkt/mustache/issues/125 – Xoundboy

+0

私はどこでそれについて知ったのか覚えていませんが、mustache.jsのREADMEは実際にそれに言及しています。 –

+2

+1関数 '(text、render)'を使って例を作るためのものです..ヒント5のドキュメントは '、render'部分を逃してしまい、あなたの問題を修正しました! – Evildonald

関連する問題