当ejs文件编译时,它将成为javascript函数。例如,此ejs文件

<h3> Users Index</h3>
<ul>
  <% users.each(function (user) { %>
    <li><%= user.get("name") %></li>
  <% })%>
</ul>


编译为此JavaScript函数:

(function() { this.JST || (this.JST = {}); this.JST["users/index"] =     function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<h3> Users Index</h3>\n\n<ul>\n  ');  users.each(function (user) { ; __p.push('\n    <li>',  user.get("name") ,'</li>\n  ');  }); __p.push('\n</ul>\n\n');}return __p.join('');};
}).call(this);


在上述javascript函数中,this指的是什么? (即骨干视图等)

最佳答案

如果运行这样的自执行函数构造

(function() { console.log(this) }).call(this);


您会注意到它会输出(Chrome控制台输出)

Window {external: Object, chrome: Object, document: document, i: undefined, StackExchange: Object…}


因此,所有这些操作只是将变量JST添加到全局(window)命名空间中,以便在以下每个脚本中均可访问它。

this.JST || (this.JST = {});行将确保是否存在window.JST(如我们所见,window = this),如果不存在,则会创建该行,并且其值将是一个空对象(this.JST = {})。

关于javascript - 编译后的jst模板中的“this”是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34407494/

10-12 07:37
查看更多