我正在构建一个小节点应用程序并使用Express with Jade和Stylus来呈现一些基本的HTMl页面。
我很好奇是否有办法让我将一些变量传递给从Node生成的.styl文件?我很清楚我可以在.styl文件中定义变量,但我需要更加动态。具体来说,我正在寻找一种简单的方法来存储数据库中的一些颜色,让节点获取这些值,然后将它们插入到.styl文件中,以便在页面呈现时传递这些变量。看起来应该这样做但是我缺乏细节。任何帮助表示赞赏。谢谢!
答案 0 :(得分:6)
您可以使用Stylus API的define()函数来设置Stylus变量并使JS函数可用。
答案 1 :(得分:6)
感谢@ebohlman,因为他的建议与我最终实施的建议非常接近。
基本上我试图弄清楚如何在Connect Middleware之上做到这一点,这就是我想出的:
在做app.configure时我使用了自定义编译编译功能(键'compile'),如下所示:
app.use(require('stylus')
.middleware({
src: app.root + '/app/public',
compile: compile
})
);
然后我创建了几个函数:
var stylus = require('stylus');
var mylib = function(style){
style.define('themeColor1', function(){
//call to the db that returns a color
color = 'blue';
color = color ? color : 'orange';
return new stylus.nodes.Literal(color);
});
};
var compile = function(str, path) {
return stylus(str)
.use(mylib);
};
然后在.styl文件中我做:
background-color themeColor1();
themeColor1函数中的三元运算符允许简单的默认值和覆盖。根据示例我花了一些时间来弄清楚API,但似乎这可能是其他人想要知道如何做的解决方案。如果有人对此方法有任何挫折,请告诉我。