これを回避する簡単な方法は、別のオブジェクトをラップして、 を使用[]
してアクセスできるようにすることです'company.id'
。たとえば、テンプレートは次のようになります。
<script id="tmpl" type="text/html">
id: <%= o.id %><br>
company: <%= o['company.id'] %>
</script>
そしてあなたのJavaScriptは次のようになります:
var html = _.template($('#tmpl').html(), {
o: {
"id": 1234,
"company.id": 4321
}
});
デモ: http://jsfiddle.net/ambiguous/wtLkP/1/
Underscore テンプレート コンパイラは、テンプレートwith
などの単純なもののコンテキストを提供するために使用するため、<%= x %>
これ以上のことはできないと思います。上記のo.
トリックよりも。source
Underscore はテンプレートから関数を作成します。関数の属性を見ると、関数のソースを確認できます。
var t = _.template(template_source);
console.log(t.source);
それはあなたに次のようなものを与えるでしょう:
function(obj){
var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};
with(obj||{}){
__p+='\n id: '+
( o.id )+
'<br>company: '+
( o['company.id'] )+
' and stuff\n';
}
return __p;
}
なぜ<%= [x] %>
うまくいかないのかがわかります。with
現在のスコープを調整するだけで、[x]
有効な JavaScript にすることはできません。