Я кодирую приложение на экспресс, и я использую ejs как механизм просмотра / шаблона.
На пути /artists
я просматриваю представление, artists.ejs
которое охватывает художники. При нажатии на обложку мне нужен вызов AJAX для извлечения соответствующих данных, поместить его в мой шаблон / представление для исполнителя artist.ejs
и отобразить этот шаблон в моем HTML под обложкой.
Я видел этот связанный вопрос, но он не решил мой прецедент.
Все кажется ясным, но я не могу отображать данные с помощью шаблона. Я хотел бы скомпилировать серверную часть шаблона, отправить его в / artist, готовый к использованию, а затем заполнить его, когда это необходимо, с данными, полученными от вызова AJAX.
Что я наделал:
При вызове 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 });
<script>
var template = <%= template %>
</script>
Я позаботился о преобразовании файла в String, поскольку компилятор ejs работает только со String (по сравнению с Jade .compileFile)
Тогда на $ . get ( '/ artist /' + artist_name , function ( data ) { var html = template ({ artist : data }); $ ( '# artist-page' ). html ( html ); } -side, я захватываю функцию :
fn
Затем по другому сценарию я извлекаю данные с помощью вызова AJAX:
fn
Но когда я звоню, я получаю:
Uncaught ReferenceError: // В файле controller.js var templates = {}; шаблоны . template1 = fs . readFileSync ( filePath1 , 'utf-8' ); // Прочитайте шаблон в виде строковых шаблонов . template2 = fs . readFileSync ( filePath2 , 'utf-8' ); ... res . render ( 'app.ejs' , { templates : templates }); // Отправить шаблоны в представлении // В поле зрения app.ejs < script type = "text / javascript" > var templates = <% - JSON . stringify ( templates ) %>; // Получить объект шаблонов (объект строк) </ script > < script type = "text / javascript" src = "/JS/ejs.min.js" > </ script > <! - Загрузить ejs RunTime -> // В site.js - javascript client / public file $ . get ( '/ artist ' , function ( data ) { var html = ejs . render ( templates . template1 , data ); // Render ejs клиентская сторона со сценарием EJS (template1 соответствует шаблону художников) $ ( '# artist -wrapper ' ). html ( html ); // Устанавливает HTML }); не определен