我正在尝试在我的Underscore模板中访问一个名为teams的变量,这被证明是我曾经遇到过的最困难的事情之一。但我现在的问题是 - 为什么我不能在我的模板javascript代码中调用alert()或window.alert()?
这是模板:
<script id="user-home-main-table-template" type="text/template">
<table class="table">
<thead>
<tr>
<th>Club</th>
<th>Sport</th>
<th>Delete?</th>
</tr>
</thead>
<tbody>
<%
if(teams == null){
alert('teams is null'); //alert is not defined
window.alert('teams is null'); //window is not defined either
var teams = {};
}
for(var i=0; i
<teams.length; i++) { %>
<tr>
<td>
<a class="font-big" href='/users/<%=user._id%>/teams/<%=teams[i]._id%>/teamDashboard'>
<%=teams[i].club %>
</a>
</td>
<td>
<a class="font-big" href='/users/<%=user._id%>/teams/<%=teams[i]._id%>/teamDashboard'>
<%=teams[i].sport %>
</a>
</td>
<td>
<a class="btn btn-warning" onclick=window.userHomeMainTableView.deleteTeam('<%=teams[i]._id%>');>delete</a>
</td>
</tr>
<% } %>
</tbody>
</table>
</script>
由于某种原因,此模板脚本中没有alert()和window.alert()。这有充分的理由吗?
答案 0 :(得分:1)
是的,这是有充分理由的。
您的模板是在您传入的data
处执行的。
评估模板函数时,传入一个数据对象,该数据对象具有与模板的自由变量对应的属性
var compiled = _.template("hello: <%= name %>");
compiled({name: 'moe'});
=> "hello: moe"
因此,当您将数据发送到模板时,它不包含window
属性 - 也不应该包含它!
如果您需要调试函数执行,只需在运行时执行模板执行。在Chrome中,在调试模式下,您可以&#34; Step Into&#34;按F11
。