【问题标题】:Is there a way to create a dynamic partial resulting from server treatment?有没有办法创建由服务器处理产生的动态部分?
【发布时间】:2015-02-21 11:29:06
【问题描述】:

我已经开始使用 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。

【问题讨论】:

    标签: node.js express ejs partials embedded-javascript


    【解决方案1】:

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

    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 });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多