2013-05-23 1 views
0

Я новичок в узле и пытаюсь найти способ интегрировать усы таким образом, чтобы он был гибким для того, как я создаю шаблоны. Пробовав хоган, усы-экспресс и другие перестановки усов, я нашел для меня смысл.- это идеальная функция частичных усов node.js?

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

У меня есть 3 частичных шаблона и один шаблон-обертка/мастер, следующие значения приведены, например.

./views/wrapper.tpl

<html> 
<title>{{ title }}</title> 
<body> 
    <h1>{{ heading }}</h1> 
    <div>{{> position_1 }}</div> 
    <div>{{> position_2 }}</div> 
    <div>{{> position_3 }}</div> 
</body> 
</html> 

./views/module_1.tpl

<h2>{{module_1.title}}</h2> 
<p>{{module_1.body}}</p> 

./views/module_2.tpl

<h2>{{module_2.title}}</h2> 
<p>{{module_2.body}}</p> 

./views/module_3.tpl

<h2>{{module_3.title}}</h2> 
<p>{{module_3.body}}</p> 

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

. 
. 
. 
var mustache = require('mustache'); 
var fs = require('fs'); 
. 
. 
. 
app.get('/', function(req, res){ 

    // grab master template 
    var wrapper = fs.readFileSync('./views/wrapper.tpl', "utf8"); 

    // load data that will be used in template & partials 
    var data = { 
       'title': 'dashboard', 
       'heading': 'welcome to your dashboard', 
       'module_1':{ 
          'title': 'module 1 title', 
          'body': 'module 1 body'}, 
       'module_2':{ 
          'title': 'module 2 title', 
          'body': 'module 2 body'}, 
       'module_3':{ 
          'title': 'module 3 title', 
          'body': 'module 3 body'}}; 

    // load partial templates 
    var partials = {'position_1': fs.readFileSync('./views/module_1.tpl', "utf8"), 
        'position_2': fs.readFileSync('./views/module_2.tpl', "utf8"), 
        'position_3': fs.readFileSync('./views/module_3.tpl', "utf8")} 

    // include partials and then replace variables with given data 
    var html = mustache.to_html(wrapper, data, partials); 

    // send output to browser 
    res.send(html); 

}); 
. 
. 
. 
. 

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

Есть ли более эффективный способ сделать это?

Есть ли что-то не так с тем, как я об этом?

Обходя возможности экспресс-рендеринга, чего я пропускаю?

Почему я должен использовать библиотеки, например, консолидировать и добавлять еще один слой для выражения?

Спасибо!

ответ

1

Если вы не хотите выразить рендеринг, это прекрасно в моей книге, я даже удалил весь модуль в некоторых своих лабораторных проектах, чтобы лучше понять маршрутизацию в узле. Однако я бы действительно советовал использовать readFileSync, поскольку это метод блокировки и сделает проблему совпадением, всегда используйте readFile, чтобы получить этот асинхронный обратный вызов.

Смежные вопросы