我在模板中显示了libraryPrep对象的模式视图,如下所示:
if (_.isUndefined(this.libraryPreps)) {
this.$el.html(this.template({ }));
} else {
this.$el.html(this.template({ libraryPreps: this.libraryPreps.toJSON() }));
}
当我有一个libraryPreps 对象时,else 语句有效。在我的模板中,我这样使用它:
<select id="libraryPreps" >
<% if (!_.isUndefined(libraryPreps)) { %>
<% _.each(libraryPreps, function (libraryPrep) { %>
<option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option>
<% }); %>
<% } %>
</select>
当我没有libraryPreps 对象时,我无法渲染模板,并且在控制台上收到一条错误,指出libraryPreps 未定义。我是否在模板中错误地检查了未定义?我觉得我在主干模式视图中以同样的方式检查它,但由于某种原因,在我的实际模板中,它似乎不起作用。我的模板符号正确吗?谢谢。
如果您将变量传递给函数,则会对其进行求值,并会抛出错误,因为不存在这样的变量。相反,在您的主干视图中,您正在访问property一个始终有效的对象(并返回undefined
值(如果不存在具有该名称的属性)。
相反,您必须使用typeof
运算符,这甚至适用于未声明的变量(看看变量===未定义与typeof变量===“未定义” https://stackoverflow.com/q/4725603 and JavaScript 检查变量是否存在(已定义/初始化) https://stackoverflow.com/q/5113374/1048572):
<select id="libraryPreps"><%
if (typeof libraryPreps !== "undefined") {
_.each(libraryPreps, function (libraryPrep) { %>
<option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option><%
});
}
%></select>
To use _.isUndefined
在您的模板中,您需要使该值在模板中显式可用。从the docs http://underscorejs.org/#template:
默认情况下,template
通过以下方式将数据中的值放置在本地范围内with
陈述。但是,您可以使用以下命令指定单个变量名称variable
环境。这可以显着提高模板的渲染速度。
_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'});
=> "Using 'with': no"
这样,您就可以编写如下模板:
<% if (!_.isUndefined(data.libraryPreps)) { %> …
<% if ("libraryPreps" in data) { %> …
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)