这里是我的模板:
var tmpl = _.template('<<%= elementTag %> <% if (_.has(elementClass)) { %> class="<%= elementClass %>" <% } %> <%= elementExtra %>><%= template(elementContent) %></<%= elementTag %>>');
有的,我将使用这个模板我没有一个对象的elementClass
属性设置。 我试着使用_.has
这样模版只试图打印的地方对象属性elementClass
的定义,但我没有成功。 只有控制台错误状态elementClass
未设置,大概是因为条件语句未能奏效,因为我本来打算。
我知道这是一个简单的问题,但我似乎无法来解决这个问题 - 我该如何使用条件在这样的语句来检测对象,而某些属性进行设置?
你不能在一般情况下,使用_.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>
将在这三种情况下感兴趣的正常工作:
var t = _.template($('#t').html());
console.log(t({ }));
console.log(t({ elementClass: undefined }));
console.log(t({ elementClass: 'pancakes' }));
演示: http://jsfiddle.net/ambiguous/H5xC7/
您可以检查elementClass
是不是undefined
。 (使用_.isUndefined
,因为我以前认为会的工作,不。)
var tmpl = _.template('<<%= elementTag %> <% if ( typeof elementClass !== "undefined" ) ) { print("class=\'elementClass\'") } %> <%= elementExtra %>><%= template(elementContent) %></<%= elementTag %>>');