2012-09-24 80 views
5

我正在構建一個小節點應用程序,並使用Express與Jade和手寫筆來呈現一些基本的HTMl頁面。節點應用程序變量傳遞到手寫筆文件

我很好奇,如果有一種方法可以讓我將一些變量傳遞到從Node生成的.styl文件中?我很清楚,我可以在.styl文件中定義變量,但我需要更加動態。具體而言,我正在尋找一種簡單的方法來在db中存儲一些顏色,讓節點獲取這些值,然後將這些值插入到.styl文件中,以便在頁面呈現時傳遞這些變量。似乎應該這樣做 - 但我缺乏細節。任何幫助表示讚賞。謝謝!

回答

6

您可以使用Stylus API的define()函數設置Stylus變量並使JS功能可用。

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,但似乎這可能是其他人希望知道如何去做的解決方案。如果有人有這種做法的任何垮臺,請讓我知道。

+0

文字似乎效果最好。 –

+2

您是否知道如何在不創建函數的情況下將節點上的變量傳遞給觸筆。我在這裏看到了.define()的答案,但它似乎爲我工作。 – qodeninja

+0

我發現'Literal'沒有按預期工作,我不得不使用'Ident' –