2014-12-23 63 views
1

我已經開始使用NodeJS幾個月了,並且我遇到了部分渲染的一個小問題。 我想在一些模板中包含部分視圖,但我希望這部分從服務器動態生成(因爲它取決於從數據庫和其他內容中檢索的數據)。有沒有辦法創建服務器處理產生的動態部分?

我試圖創建一個模板助手來做到這一點,但由於處理需要異步完成,我無法得到一個html返回在我的模板中寫入。

基本上這將是對我最好的將是類似的東西(此代碼不會明顯工作):

template_file.js

... 
<div> 
    <%- generatePartial(data) %> 
</div> 
... 

helper_middleware.js

module.exports = function registerAppHelpers(request, response, next) 
{ 
var appHelpers = {}; 

appHelpers.generatePartial = function generatePartial(data) 
{ 
    if (request.isAuthenticated()) 
    { 
     DB.findOne({ id: request.user.id }, function found(error, obj) 
     { 
      if (error) 
       ... 

      if (obj) 
      { 
       return generatePartial1(data); 
      } 
      else 
      { 
       return generatePartial2(data); 
      } 
     }); 
    } 
    else 
    { 
     return generatePartial3(data); 
    } 
}; 

// Register the helpers as local variables to be accessed within a template. 
for (var helper in appHelpers) { 
    response.locals[helper] = appHelpers[helper]; 
} 

next(); 
}; 

現在我可能完全錯了我想要的方式有這個問題,所以如果你有任何解決方案/其他建議,不要猶豫。 PS:我使用ExpressJS和EJS。

回答

2

我認爲你是在一個錯誤的方向完全去..

  1. 什麼EJS是?

ejs是JavaScript嵌入在HTML中,所以你可以創建動態的HTML。

  1. 因此,無論您將哪些邏輯寫入ejs模板並讓它處理所有內容。你只需要將信息傳遞給ejs引擎。

所以不是

if (obj) 
      { 
       return generatePartial1(data); 
      } 
      else 
      { 
       return generatePartial2(data); 
      } 

我建議捕獲整個數據

if (obj) 
      { 
       array1.push(data); 
      } 
      else 
      { 
       array2.push(data); 
      } 
  • ,然後再通過本一大堆數據來EJS ,將條件和所有邏輯寫入ejs文件,並讓它處理html邏輯。前者爲 。
  • res.render('template_file.js', { array1: array1, array2: array2 });

    相關問題