1

NodeJS を使い始めて 2 か月が経ちましたが、パーシャル レンダリングでちょっとした問題に遭遇しました。一部のテンプレートに部分ビューを含めたいのですが、この部分ビューをサーバーから動的に生成したいと考えています (DB やその他のものから取得したデータに依存するため)。

それを行うためにテンプレートヘルパーを作成しようとしましたが、処理を非同期で行う必要があるため、テンプレート内に書き込むための 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 を使用しています。

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 に答える