2014-12-23 33 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 });

    相关问题