2012-04-17 88 views
1

我在this application操縱的代碼,並把在側邊欄的意見/ layout.jade文件。在側欄中我剪/粘貼代碼從視圖處理標籤/ index.jade:參考錯誤:「沒有定義標籤」

ul.tags 
     each tag in tags 
      a(href='/tag/' + tag._id.toHexString()) 
       li.tag= tag.name 

的標籤是從DB牽強,因爲他們應該,並且在側邊欄呈現出來,但是當我點擊對他們中的一個(這應該顯示標籤與標籤的所有帖子的新頁)我得到一個錯誤信息:

500 ReferenceError: ... layout.jade:10 8| p 9| ul.tags > 10| each tag in tags 11| 
    a(href='/tag/' + tag._id.toHexString()) 12| li.tag= tag.name tags is not defined 

這裏有被稱爲在文件「tagcontroller.js」的功能(這是處理用於標籤的邏輯):

app.get('/tag/:id', function(req, res){ 

    model.Tag.findById(req.params.id, function (err, tag){ 
     if (err) { 
      console.log(err); 
      // do something 
     } 

     var query = blogModel.BlogPost.find({ _id: { $in : tag.blogs } }); 
     query.where('date').lte(new Date()); 

     query.exec(function (err, blogs) { 
      if (err) { 
       console.log(err); 
       // do something 
      } 

      var query = model.Tag.find({}); 

      query.exec(function (err, tags) { 
       if (err) { 
        console.log(err); 
        // do something 
       } 
       res.render('tags/detail', { title: tag.name, blogs: blogs, tagList: tags, dateFormatter: dateFormatter }); 
      }); 
     }); 
    }); 
}); 

如果我把代碼放回views/index.jade,一切工作正常。但我需要在layout.jade中將其顯示在每個頁面上,而不僅僅是Home(index.jade)。

我真的很感謝一些幫助!

回答

2

現在,您有:

res.render('tags/detail', { title: tag.name, blogs: blogs, tagList: tags, dateFormatter: dateFormatter }); 

但是,如果你正在做一個each tag in tags,那麼你應該有類似

{ title: tag.name, blogs: blogs, tags: tags, dateFormatter: dateFormatter } 
+0

非常感謝你,最後它工作的感謝。你會盡快得到你的獎勵(17小時)。 :) – holyredbeard 2012-04-19 18:37:18

+1

不客氣;)!但是你應該使用幫助器,以便不在每個頁面中查詢標籤。你可以在這裏找到一些信息:http://dailyjs.com/2011/01/03/node-tutorial-8/,這樣你就可以在特定的助手中檢索標籤,並在佈局中調用這個助手。 – Tronix117 2012-04-19 18:47:11

+0

謝謝,我即將實施它。 – holyredbeard 2012-04-19 20:08:51