5

我正在构建一个小节点应用程序,并使用 Express with Jade 和 Stylus 来呈现一些基本的 HTMl 页面。

我很好奇是否有办法将一些变量传递到从 Node 生成的 .styl 文件中?我很清楚我可以在 .styl 文件中定义变量,但我需要更加动态。具体来说,我正在寻找一种简单的方法来在数据库中存储一些颜色,让节点获取这些值,然后将它们插入到 .styl 文件中,以便在呈现页面时传递这些变量。看起来应该这样做-可以,但我缺乏细节。任何帮助表示赞赏。谢谢!

4

2 回答 2

6

感谢@ebohlman,因为他的建议与我最终实施的很接近。

基本上我试图弄清楚如何在连接中间件之上做到这一点,这就是我想出的:

在执行 app.configure 时,我使用了自定义编译功能(键“编译”),如下所示:

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,但似乎这可能是其他人想知道如何做的解决方案。如果有人对这种方法有任何不满,请告诉我。

于 2012-09-25T17:38:46.517 回答
6

您可以使用 Stylus API 的define()函数来设置 Stylus 变量并使 JS 函数对其可用。

于 2012-09-25T01:15:42.553 回答