1

アンダースコアテンプレートを使用してHTMLリストを作成しています。このリストには、グローバル化する日付フィールドが含まれています。テンプレートの簡略化は次のようになります。

<li>Date: <%= date %> </li>

この日付はJavascriptの日付オブジェクトであるため、値を直接出力したくないので、globalizeを使用して出力したいと思います。テンプレートがない場合、ソリューションは次のようになります。

var html = "<li>Date: " + Globalize.format(settings.get('lastUpdate'),'F') + "</li>";

テンプレートを使用してこれを実現できると思いますか、それとも回避策を使用する必要がありますか?

4

1 に答える 1

2

テンプレート内でグローバルにアクセス可能な関数を呼び出すことができます。したがって、Globalizeがグローバル (つまり のプロパティwindow) の場合、このテンプレートは次のようになります。

<script id="tmpl" type="text/html">
    <li>Date: <%= Globalize.format(date, 'F') %></li>
</script>

この JavaScript で動作します。

_.template($('#tmpl').html(), {
    date: some_date_that_globalize_understands
});

Globalizeグローバルに利用できない場合は、次のことができます。

window.Globalize = Globalize;

グローバルに利用できるようにするか、テンプレートの名前空間に手動で追加します。

_.template($('#tmpl').html(), {
    Globalize: Globalize,
    date:      some_date_that_globalize_understands
});

デモ:

  1. Globalizeを通じてグローバルwindow.Globalize.
  2. パラメータGlobalizeによるローカル。_.template.

Underscore テンプレートについて特別なことは何もありません。内部のものは、最終的にblock<%= %>でラップされる JavaScript コードです。返されたテンプレート関数のプロパティを見ることで、関数のソースを確認することもできます。withsource

var t = _.template($('#t').html());
console.log(t.source);

次のような非常に単純な (醜い場合) JavaScript が表示されます。

function(obj){
var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};
with(obj||{}){
__p+='\n    '+
( Globalize.mangle(pancakes) )+
'\n';
}
return __p;
}

その+ (Globalize.mangle(pancakes) )+ビットが変換されるもの<%= Globalize.mangle(pancakes) %>です。マジックも、 のコンテンツの特別な解析もありません<%= ... %>。単純な (しかし効果的な) JavaScript への変換です。

于 2012-06-01T16:55:16.830 に答える