Javascript 检查下划线模板中是否存在未定义的变量
我在模板中显示libraryPrep对象的模式视图,如下所示:Javascript 检查下划线模板中是否存在未定义的变量,javascript,underscore.js,Javascript,Underscore.js,我在模板中显示libraryPrep对象的模式视图,如下所示: if (_.isUndefined(this.libraryPreps)) { this.$el.html(this.template({ })); } else { this.$el.html(this.template({ libraryPreps: this.libraryPreps.toJSON() })); }
if (_.isUndefined(this.libraryPreps)) {
this.$el.html(this.template({ }));
} else {
this.$el.html(this.template({ libraryPreps: this.libraryPreps.toJSON() }));
}
<select id="libraryPreps" >
<% if (!_.isUndefined(libraryPreps)) { %>
<% _.each(libraryPreps, function (libraryPrep) { %>
<option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option>
<% }); %>
<% } %>
</select>
<% if (!_.isUndefined(data.libraryPreps)) { %> …
<% if ("libraryPreps" in data) { %> …
else语句在我有libraryPreps对象时有效。在我的模板中,我是这样使用它的:
if (_.isUndefined(this.libraryPreps)) {
this.$el.html(this.template({ }));
} else {
this.$el.html(this.template({ libraryPreps: this.libraryPreps.toJSON() }));
}
<select id="libraryPreps" >
<% if (!_.isUndefined(libraryPreps)) { %>
<% _.each(libraryPreps, function (libraryPrep) { %>
<option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option>
<% }); %>
<% } %>
</select>
<% if (!_.isUndefined(data.libraryPreps)) { %> …
<% if ("libraryPreps" in data) { %> …
当我没有libraryPreps对象时,我无法获取要渲染的模板,并且控制台上出现一个错误,即libraryPreps未定义。我是否检查模板中未正确定义的内容?我觉得我在主干模式视图中以同样的方式检查它,但由于某种原因,在我的实际模板中,它似乎不起作用。我的模板符号正确吗?谢谢。如果要将变量传递给函数,它将被求值,并将抛出错误,因为没有这样的变量。相反,在主干视图中,您访问的是一个始终有效的对象的属性(如果不存在具有该名称的属性,则返回
undefined
值)
相反,您必须在其上使用typeof
运算符,该运算符甚至适用于未声明的变量(请查看和):
因此,您可以这样编写模板:
if (_.isUndefined(this.libraryPreps)) {
this.$el.html(this.template({ }));
} else {
this.$el.html(this.template({ libraryPreps: this.libraryPreps.toJSON() }));
}
<select id="libraryPreps" >
<% if (!_.isUndefined(libraryPreps)) { %>
<% _.each(libraryPreps, function (libraryPrep) { %>
<option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option>
<% }); %>
<% } %>
</select>
<% if (!_.isUndefined(data.libraryPreps)) { %> …
<% if ("libraryPreps" in data) { %> …
…
…
我遇到了类似的问题,我找到了以下解决方案:
而不是:if(typeof libraryPreps!=“undefined”){
用法:
如果(!\u.isUndefined(obj.libraryPreps)){
我知道这涉及到一个旧线程。但此问题仍然处于活动状态
我已经为自己的堆栈创建了一个解决方案。可能对其他程序员有用
此代码检查变量是否未定义或为null。如果变量未定义或为null,则返回变量名。(使用模板语法)
此更改针对下划线JS v1.6.0进行了测试。如果有小的更改,则将适用于1.9.1。进一步查看Lodash。这将适用于小的调整
在下划线的开发版本中:
v1.6.0规则:1239
更新版本规则:1575
旧代码:
if(转义){
source+=“'+\n((“+escape+”)==null?“”:“:”escape(“+escape+”)+\n';
}
if(插值){
source+=“'+\n((“+interpolate+”)==null?“:+\t)+\n';
}
如果(评估){
source+=“;\n”+evaluate+“\n_up+=”;
}