Специальный шаблонный движок Express.js (планшет) - PullRequest
6 голосов
/ 17 января 2012

Я пытаюсь заставить движок шаблонов плит работать с express.js. Моя первая попытка была такой:

app.register('.html', {
    compile: function (str, options) {
        var template = new plate.Template(str);
        return function(locals) {
            return template.render(locals, function(err, data) {
                return data;
            });
        }
    }
});

Я вижу, что проблема в том, что template.render ничего не возвращает (не определено), а передает данные в обратный вызов. Я не уверен, как заставить это работать в этом случае, поскольку Express ожидает, что функция компиляции возвратит функцию, которая непосредственно возвращает обработанный шаблон при вызове.

Я подумал, что, возможно, я смогу использовать обещания для решения этой проблемы, но там тоже не удалось, поскольку экспресс-код не ожидает возврата обещания. Я не слишком разбираюсь в обещаниях, поэтому я могу просто ошибиться:

app.register('.html', {
    compile: function (str, options) {
        var promise = new Promise();
        var template = new plate.Template(str);
        return function(locals) {
            template.render(locals, function(err, data) {
                promise.resolve(data);
            });
            return promise;
        }
    }
});

Вот пример пользовательской реализации, которая работает. Разница в том, что функция template () подчеркивания напрямую возвращает визуализированную строку, например:

app.register('.html', {
    compile: function (str, options) {
        var template = _.template(str);
        return function (locals) {
            return template(locals);
        };
    }
});

Я бы очень хотел использовать шаблоны Plate, так как тег {% block%} такой классный. Любая помощь приветствуется.

соответствующая документация:

Документы Github для планшетов

express.js app.register docs

1 Ответ

5 голосов
/ 21 января 2012

После того, как я спросил об этом, создатель планшета быстро добавил в проект патч, чтобы сделать его совместимым с Express. Plate@0.0.13+ имеет изменения, и вы можете увидеть детали реализации здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...