一尘不染

我应该在哪里定义JS函数以在EJS模板中调用

node.js

我正在尝试使用Express和ejs渲染模板的模板。至于节点应用程序的标准结构,我有一个app.js文件,其中包含如下功能:

app.locals.getFlag = function(country) {
var flag_img_name = "";
if (country.toLowerCase() == "us") {
    flag_img_name = "flag_us16x13.gif";
}   
else if (country.toLowerCase() == "ca"){
    flag_img_name = "flag_ca16x13.gif";
}
return flag_img_name;
}

我有some_template.ejs文件,该文件如下所示调用此函数:

<img src="http://some_url_path/<%=getFlag(data_point[0].country_name) %>" width="16" height="14" alt="country" >

而且效果很好。但是,我大约有15-20个这样的函数,并且我不想在app.js中定义所有这些函数。还有其他地方可以定义这些函数并以与我现在相同的方式在模板中调用它们吗?如果是,那么定义它们的方式将是什么,以便像现在一样可以访问它们。

我是node,express和ejs的新手,不确定采用哪种技术。如果有人可以照亮它,那就太好了。先感谢您。


阅读 728

收藏
2020-07-07

共1个答案

一尘不染

只需在此处发布此答案,以供在解决同一问题时可能会遇到此问题的人。

您所需要做的就是创建一个新文件(例如functions.ejs),并将其包含在您要调用该函数的.ejs文件中。因此,我在名为的文件中具有这样的功能functions.ejs

<%
getPriceChgArrow = function(value) {
    arrow_img_name = "";
    if (value < 0) {
        arrow_img_name = "arrow_down12x13.gif";
    }
    else {
        arrow_img_name = "arrow_up12x13.gif";
    }
    return arrow_img_name;
}
%>

然后将其包含functions.ejs在您要从中调用函数的文件中。说,我想在quote.ejs文件中调用此函数。因此,我将其包括如下:

<% include *file_path*/functions %>

只需在要调用它的ejs文件中的适当位置使用此函数。例如:

<img src = "http:/some_url/<% getPriceChgArrow(data_point[0].value) %>" />

你们都准备好了。希望这对某人有帮助。

2020-07-07