1

これが私のテンプレートです:

var tmpl = _.template('<<%= elementTag %> <% if (_.has(elementClass)) { %> class="<%= elementClass %>" <% } %> <%= elementExtra %>><%= template(elementContent) %></<%= elementTag %>>');

このテンプレートを使用してレンダリングするオブジェクトの中には、elementClass属性が設定されていないものがあります。_.hasテンプレートが定義されているオブジェクトの属性のみを出力しようとするように使用しようとしましelementClassたが、成功しませんでした。コンソールエラーはelementClass、おそらく条件ステートメントが意図したとおりに機能しなかったために、設定されていないことだけを示しています。

これは単純な問題であることは知っていますが、解決できないようです。このようなステートメントで条件を使用して、特定の属性が設定されていないオブジェクトを検出するにはどうすればよいですか?

4

2 に答える 2

4

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

于 2013-01-14T20:02:40.177 に答える
1

elementClassでないかどうかを確認できundefinedます。(_.isUndefined以前はうまくいくと思っていたように、を使用しても機能しません。)

var tmpl = _.template('<<%= elementTag %> <% if ( typeof elementClass !== "undefined" ) ) { print("class=\'elementClass\'") } %> <%= elementExtra %>><%= template(elementContent) %></<%= elementTag %>>');
于 2013-01-14T19:24:11.573 に答える