1

我已经开始使用 NodeJS 几个月了,我遇到了局部渲染的小问题。我想在一些模板中包含一个局部视图,但我希望这个局部视图是从服务器动态生成的(因为它取决于从数据库和其他东西检索到的数据)。

我试图创建一个模板助手来做到这一点,但由于处理需要异步完成,我无法在我的模板中获得要写入的 html 返回。

基本上对我来说最好的是类似于(这段代码显然不起作用):

模板文件.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。

4

1 回答 1

2

我认为你完全走错了方向..

  1. ejs 是干什么用的?

ejs 是嵌入在 html 中的 javascript,因此您可以创建动态 html。

  1. 因此,无论您在 ejs 模板中编写什么逻辑,并让它处理所有事情。您只需要将信息传递给 ejs 引擎。

所以而不是

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

我建议捕获整个数据

if (obj)
            {
                array1.push(data);
            }
            else
            {
                array2.push(data);
            }
  1. 然后把这一大堆数据传给ejs,把条件和所有的逻辑写在ejs文件里,让它处理html逻辑。例如。

res.render('template_file.js', { array1: array1, array2: array2 });

于 2014-12-23T13:25:05.833 回答