2016-10-08 2 views
1

В server.js у меня есть что-то вроде этого:Использование хелперов изнутри экспресс-рули вернуть HTML отформатированный код

var express = require('express'); 
var path = require('path'); 
var exphbs = require('express-handlebars'); 

var app = new express(); 

var handlebars = require('./helpers.js')(exphbs); 

app.set('views', path.join(__dirname, 'views')); 

app.engine('.hbs', handlebars.engine); 


app.set('view engine', '.hbs'); 

app.set ('port', (process.env.PORT || 5000)); 

app.get('/', function(req,res){ 
    res.render('home', { 
     title: 'Express App with Handlebars templates', 
     content: 'This is some content', 
     persons: [ 
      { 
       name: 'branchito', 
       instrument: 'guitar', 
      }, 
      { 
       name: 'joe', 
       instrument: 'flute', 
      }, 
     ] 
    }); 
}); 



app.listen(app.get('port'), function(){ 
    console.log('Server started on port ' + app.get('port')); 
}) 

, а затем в моем helpers.js файле:

function hbsHelpers(hbs) { 
    return hbs.create({ 
    helpers: { // This was missing 
     inc: function(value, options) { 
     console.log('reading it'); 
     return parseInt(value) + 1; 
     }, 
     strong: function(text) { 
      return '<strong>' + text + '</strong>'; 
     } 

     // More helpers... 
    } 

    }); 
} 

module.exports = hbsHelpers; 

Но тогда вывод, генерируемый strong helper делает это как <strong>...</strong> .. Как бы я пошел, чтобы строка не была сохранена, я знаю, что есть Handlebars.SafeString(), но не знаю, как ее использовать из этого экземпляра express-handlebars.

ответ

0

Не уверен, что если я понять это правильно, и, вероятно, немного слишком поздно, но у меня было такое же (или, по крайней мере smilar вопрос):

Когда я хотел показать свое содержание с {{вар} } и var, например, <strong>somevar</strong> У меня была проблема, что он был показан как &lt;strong&gt;somevar&lt;/strong&gt;

мой обходной путь, что переменная не была оказана через визуализатора рули по умолчанию, но создает функцию, делая это для вас:

var hbs = exphbs.create({ /* ... */ helpers: { raw: function (a) { return a; }, } });

И в подам .handlebars я сделал следующее:

<p>{{#raw var}}{{/raw}}</p>

Таким образом, это в основном так же, как вы делали. Я тоже пробовал ваш код, и это сработало для меня. Возможно, вы не называете это правильным в файле руля?

1

Для вывода необработанного HTML вместо экранированного HTML используйте три фигурных скобки вместо двух.

Например:

{{{strong}}} 

Выведет необработанный HTML от помощника:

strong: function(text) { 
    return '<strong>' + text + '</strong>'; 
} 

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

  • Нет связанных вопросов^_^