【发布时间】:2012-05-02 20:16:08
【问题描述】:
我正在使用 Jade/Express 构建的网站工作了几周。我最近为网站整理了图片文件夹,因此所有图片都在几个文件夹之间分配,以便于使用和分类。
为了更容易更改图像(和其他此类文件)的层次结构,我编写了一个脚本,其中包含一些文件路径的全局变量。现在我一直在尝试让脚本运行,以便我可以调用翡翠模板中的函数来自动使用这些全局变量。
例如。图像现在被分类到几个文件夹中:
文件层次结构
img/
glyphs/
interactivity/
buttons/
...
在我的路径管理器脚本中,我创建了几个函数,包括:
在:path-manager.js
images_root_path = "/img/";
glyph_path = images_root_path + "glyphs/";
function getGlyph(color, name) {
return glyph_path + color + "/" + name;
}
我尝试了几种方法让脚本在模板之前执行。这是其中一种尝试:
在page.jade
include ../../../public/js/lib/path-manager.js
=NamespacePathManager();
上面是理论上应该包含js然后我执行下面的命名空间使功能可用,但这不起作用。
这是我想在其中使用函数的 Jade 模板的一部分:
在page.jade 脚本后包含
span.challenge-time
img(src=getGlyph("black","stopwatch.png"), style="margin-right:5px;")
上面的例子应该返回:"/img/glyphs/black/stopwatch.png"
问题是,我相信,我试图让翡翠模板在服务器端可用的脚本在渲染翡翠模板之前没有被执行。我为使其正常工作所做的一切尝试总是导致错误提示服务器无法识别函数 getGlyph 或者当我开始使用命名空间函数时,NamespacePathManager
总结: 我希望在将翡翠模板渲染到网页之前执行一个 javascript 文件,以便在渲染翡翠模板时从服务器上的该 javascript 调用函数和变量以使用。我的问题是我尝试过的所有方法都无法在 Jade 渲染之前执行 javascript。
更新 我发现的一种解决方法是将 javascript 直接放入页面上的无缓冲代码中,包括一个玉。这不是我一直在寻找的优雅解决方案,但它现在可以工作
- some code
- more code
此代码是内联执行的。缺点是我必须手动将它包含在每个页面上 - 而不是只包含一次并让功能随处可用。
【问题讨论】:
标签: javascript template-engine pug