2011-01-11 49 views
0

我有一個bug已經困擾了我好幾天。我很新的節點和玉模板系統,忍耐一下:我希望通過以下方式添加樣式表:玉模板「每個」功能返回空對象

App.js(快遞):

app.get('/', loadUser, function(req, res) { 
var User = req.user; 
// console.log(User.groups[2]); 
// var groups = User.groups.split(','); 
// OK DUh. This only gets called when the client has the script Socket.IO 
// and client runs socket.connect() 

getMessages(User, function(messages) { 

    var locals = { 
    scripts: [ 
    'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', 
    'index.js' 
    ], 

    stylesheets: [ 
    'index.css' 
    ], 

    user : User, 
    messages: messages 
    }; 

    console.log('ok'); 

    res.render('app.jade', {locals : locals}); 

}); 

}); 

佈局。玉(與app.jade執行),我有:

!!! 5 
html 
head 
    title UI 
    link(rel='stylesheet', href = 'stylesheets/reset.css') 
    link(rel='stylesheet', href = 'stylesheets/layout.css') 
    - var stylesheets = stylesheets || []; 
      #{stylesheets} 
    - each stylesheet in stylesheets 
    - if(stylesheet.indexOf('http') >= 0) 
    link(rel='stylesheet', href = stylesheet) 
    - else 
    link(rel='stylesheet', href = "stylesheets/"+stylesheet) 

加上更多...我一直運行到了同樣的錯誤:

9. ' - if(stylesheet.indexOf(\'http') >= 0)' 

Object function() { 
    var o = {}, i, l = this.length, r = []; 
    for(i=0; i 
    for(i in o) r.push(o[i]); 
    return r; 
} has no method 'indexOf' 

現在..這個確切的模板可以在另一個應用中傳遞完全相同的變量:我真的很感謝你們在這個棘手問題上提出的任何建議!

謝謝! 馬特·穆勒

回答

2

因此,這裏是你的問題......

在這一行:

res.render('app.jade', {locals : locals});

你逝去的當地人==>當地人說,這是一個散列(OK,所以我一個PERL的傢伙,我覺得JS稱他們爲「關聯數組」)

所以,現在你的玉模板中,我們有行:

- var stylesheets = stylesheets || [];

在JADE裏面,你已經定義了變量「locals」,但其他的東西都隱藏在那裏,所以變量「stylesheets」沒有被定義(locals.stylesheets被定義)。所以這行代碼將變量「stylesheets」設置爲「[]」

所以這裏是我必須推測的地方。 「indexOf」是Array對象的一個​​方法。也許在JADE內部構造的數組沒有這個方法,而在node.js DO中構造的數組有這個方法。這可以解釋爲什麼你會遇到一個錯誤,試圖調用「stylesheets.indexOf(...)」