一般的に、これには使用できません_.isDefined。このテンプレートを検討してください。
<script id="t" type="text/x-underscore-template">
<% if(!_.isUndefined(elementClass)) { %>
<%= elementClass %>
<% } else { %>
No such thing.
<% } %>
</script>
そしてこのコード:
var t = _.template($('#t').html());
console.log(t({ }));
コンパイルされたテンプレート関数のスコープtがないため、を呼び出すとReferenceErrorが発生します。elementClassしたがって、オブジェクトにelementClassプロパティがまったくない場合、テンプレートを取得しようとすると、テンプレート関数は失敗します。
デモ: http: //jsfiddle.net/ambiguous/H22D2/
問題は、関数が式の値_.isUndefinedのみをチェックでき、渡した変数(またはテンプレートの内部使用によるプロパティ)が宣言されているかどうかをチェックできないことです。with
オブジェクトにelementClassプロパティがあり、値が未定義である可能性がある場合は、次を使用できます_.isDefined。
t({ elementClass: undefined })
大丈夫だろう。
デモ: http: //jsfiddle.net/ambiguous/LUakg/
elementClassオブジェクトにプロパティがある場合とない場合がある場合は、オペランドを評価しようとしないので、使用typeofし続けます。typeofこのようなもの:
<script id="t" type="text/x-underscore-template">
<% if(typeof elementClass !== 'undefined') { %>
<%= elementClass %>
<% } else { %>
No such thing.
<% } %>
</script>
関心のある3つのケースすべてで正常に機能します。
var t = _.template($('#t').html());
console.log(t({ }));
console.log(t({ elementClass: undefined }));
console.log(t({ elementClass: 'pancakes' }));
デモ: http: //jsfiddle.net/ambiguous/H5xC7/