Я кодирую приложение на экспресс, и я использую ejs в качестве механизма просмотра/шаблона.Не удается отобразить шаблон EJS на клиенте
На пути /artists
, я представляю вид artists.ejs
, который имеет обложки для художников. При нажатии на обложку мне нужен вызов AJAX для получения соответствующих данных, поместите его в мой шаблон/представление для исполнителя artist.ejs
и покажите этот шаблон в своем HTML под обложкой.
Я видел this Связанный вопрос, но он не решил мой прецедент.
Все кажется ясным, но я не могу отобразить данные с помощью шаблона. Я хотел бы скомпилировать серверную часть шаблона, отправить его клиенту, готовому к использованию, а затем заполнить его, когда это необходимо, с данными, полученными от вызова AJAX.
Что я сделал:
При вызове /artists
, компилировать на стороне сервера с помощью ejs.compile(str, opt)
:
router.get('/artists', function(req, res) {
// Compile artist template
fs.readFile('views/artist.ejs', "utf-8", function(err, template) { // Convert template file to string
artist_template = ejs.compile(template); // Compile template
res.render('artists.ejs', {template: artist_template}); // render page with compiled template
});
Я заботилась о преобразовании файла в строку, так как EJS компилятор работает только с Последовательностью (по сравнению с Джейд .compileFile)
Тогда на стороне клиента, я захватить функцию:
<script>
var template = <%= template %>
</script>
Тогда на другой сценарий, я извлечь данные с вызова AJAX:
$.get('/artists/'+artist_name, function(data) {
var html = template({artist: data});
$('#artist-page').html(html);
}
Но когда я делаю вызов, я получаю:
Uncaught ReferenceError: fn is not defined
Когда я называю шаблон, fn
, я получить:
Uncaught ReferenceError: opts is not defined.
ли функция fn
жестко? Я прочитал документацию EJS и Jade, но в отношении моей проблемы мало информации.
Возможно, мне нужен шаблон на стороне клиента?
Привет, Райан, спасибо за ваш ответ. В приведенном ниже ответе обходной путь я объяснил, и он работает хорошо, но я также хотел попробовать эту технику, скомпилировать серверную часть шаблона и запустить ее на стороне клиента, но невозможно заставить его работать! Не могли бы вы немного помочь мне в этом вопросе? Благодаря! –