模板中的下划线条件
Underscore Conditionals in Template
这是我的模板:
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 %>>');
相关文章:
- es6 相当于下划线查找位置
- 用空格替换下划线PHP
- 如何使用下划线js转换这些数据
- 带嵌套json的下划线js查找
- 如何逃离<>在javascript下划线模板中
- TinyMCE从MSWord粘贴的文本在所有文本下加下划线
- 使用lodash下划线基于键拆分jsonarray
- 在控制台中显示下划线变量
- 如何从另一个带下划线的数组中筛选带元素的数组
- 筛选下划线中的对象
- 在键值对中对求和值进行下划线
- 使用下划线将键和值的两个数组合并到一个对象中
- 如何将文件名中的斜线替换为下划线
- 如何在结果中添加下划线但不添加虚假值的情况下进行映射
- 如何在具有某些条件的情况下从列表中删除重复项,下划线.js
- 可以使用下划线's与条件的“交集”
- 下划线_.过滤条件
- 如何使用下划线模板编写条件if语句
- 如何分割javascript数组的对象与特定条件使用lodash/下划线
- 模板中的下划线条件