一般的に、これには使用できません_.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/