在Jade中使用外部变量

3
我有一个变量,名为test,在script.js文件中。我在index.jade文档的头部引用了script.js文件,如下所示:script(type="text/javascript")(src="scripts/script.js")
在我的index.jade文件中,我需要使用那个test变量,但是当我尝试使用的时候,几乎所有情况下都会出现错误,提示'test' is not defined
我发现类似body(onload="alert(test);")这样的代码可以访问test变量,但是像p #{test}p= test这样的代码不能访问它,而这正是我需要使其工作的地方。
那么,我该如何将一个变量从script.js传递到index.jade,以便Jade可以识别它?非常感谢您所提供的任何建议。

你尝试将colors数组作为本地变量传递到Jade中了吗?而你所说的“外部”是指服务器上、另一个JavaScript文件内还是其他地方? - zemirco
1
@zeMirco - 抱歉表述不清;我指的是另一个链接到我的Jade文件的Javascript文件。当数组在Jade块内声明时,它可以正常工作,就像我在问题中写的那样。问题是我想在我的Javascript文件中全局声明它,并能够在我的Jade文件中访问它。 - ben
1个回答

4

这是服务器端JavaScript:

- var colors = ['red', 'green', 'blue']

这是客户端代码:

body(onload="alert(colors);")

因此,客户端的颜色未定义。你可以这样做:

body(onload="alert(#{colors});")

编辑:

如果colors是客户端的JavaScript变量,则应按照以下方式执行:

ul#myul

script
    window.addEventListener('load', function(){
        var ul = document.getElementById('myul');
        for(var i = 0; i < colors.length; i++){
            var li = document.createElement('li');
            li.innerHTML = colors[i];
            ul.appendChild(li);
        }
    })

编辑:

test是客户端变量,不能用作服务器端js变量。要在jade中使用它,您应该首先从nodejs服务器传递它,如下所示:

res.render('myviewpath', { test: test });

实际上,当colors被存储在外部时,onload="alert(colors)"可以工作,而alert(#{colors})则不行。假设我想将数组colors中的每个颜色放入Jade中的一个li中,如果我访问的数组没有存储在Jade文件中,有没有办法做到这一点?这就是我遇到的问题。 - ben
谢谢。请看一下我的修改后的问题,因为我认为我表达不清楚。 - ben
@ben test是客户端变量,不能用作服务器端js变量。要在jade中使用它,您应该首先像这样从服务器传递它,在nodejs中:res.render('myviewpath', { test: test }); - karaxuna
好的,感谢您的帮助。如果您按照我的要求修改您的答案,我将很乐意给您点赞并接受它。 - ben
@ben 如果你还有任何问题,不需要接受它,让我们一起解决它们 :) - karaxuna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接