1

我是整个 nodejs 生态系统的新手,所以请慢慢说,用小词。

过去,在使用 PHP 开发网站时,我通常会包含 header.php 和 footer.php。标头包含通常包含 HTML 头元素,因此要在 header.php 中定义标题和元标记的默认值,我通常实现如下逻辑:

if (title is not defined) {
    use some default title;
}

这让我能够捕捉到我没有为某些单独的页面设置标题或元描述标签的情况,并使用一些默认的全局值。

我现在正在尝试在sails.js 中做同样的事情,但我得到了一些奇怪的结果。在某些观点(例如“test.ejs”)中,我有:

<%
    var pg_title = 'test';
%>
<%- include header.ejs %>

然后在标题中我有:

<%
    console.log(pg_title);
%>

这行得通。(即它呼应“测试”)

但是,如果 header.ejs 包含任何类型的关于是否已定义 pg_title 的测试,则在 test.ejs 中设置的 pg_title 的值总是被忽略(它回显“未定义”)。

目前,header.ejs 包含以下代码,但我尝试了几种不同的方法。

if (typeof pg_title == 'undefined') {
    var pg_title = __('pg_title_default');    
}

上述条件将始终评估为真。如果我按照 Ravi 的建议在 header.ejs 中删除“var”,我会收到“pg_title is not defined”错误。

我究竟做错了什么?

4

1 回答 1

3

您不应该在这样的模板中设置变量。除了明显加重的范围问题之外,它只是混淆了您的应用程序的各个层,并为您提供了一个更多的地方来检查何时出现问题。将您的视图本地人设置为:

如果您需要为本地视图设置一些默认值,那么策略将是一个好地方。

所以,你想做的是不好的做法。至于它不起作用的原因,这是第二个 var问题,如var pg_title = __('pg_title_default'). ejs当尝试eval该代码块时,它会导致我提到的一些加剧范围界定问题。

于 2014-12-22T06:30:33.223 回答