EJS: <% против <% - -> В чем разница - PullRequest
1 голос
/ 01 июля 2019

Документация EJS суммирует разницу между <% и <% - как показано ниже: </p>

<% тег 'Scriptlet', для потока управления, без вывода </p>

<% = Выводит значение в шаблон (HTML экранированный) </p>

<% - Выводит неэкранированное значение в шаблон </p>

Однако я заметил, что получаютот же вывод HTML, использую ли я <% или <% -, как показано ниже </p>

<%# Include header %>
<% include partials/header %> //Using <%

<h1>This is the home page</h1>
<p>Some content goes here</p>

<%# Include footer %>
<%- include partials/footer %> //using <%-

Это мой файл header.ejs

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" type="text/css" href="/app.css">
    <title>Demo App</title>
</head>
<body>

Я уже проверил следующий вопрос ( EJS: <% = против <% - </a>), но это не объясняло это поведение.

1 Ответ

1 голос
/ 01 июля 2019
Теги

<%- и <% имеют различное назначение, первый - просто для неэкранированного вывода:

const template = '<%- user %>';
ejs.render(template, { user: 'Alice' }); // renders "Alice"

Но, скажем, пользователей много, в этом случае может потребоваться использоватьнекоторая структура управления потоком для перебора пользователей, это когда используется <%:

const template2 = '<% users.map(user => { %> <%- user -%> <% }) %>';
ejs.render(template, { users: ['Alice', 'Bob'] }); // renders "Alice  Bob"

Как вы можете убедиться, в этих примерах теги <%- и <% имеют различное поведение и не являются взаимозаменяемыми,


Случай, который вы описали с помощью include, довольно особенный.На мой взгляд, ожидаемое поведение будет не выводить partials/header<%), поскольку это простой шаблон (не управление потоком).

Вот как это работает с современными include синтаксис, т.е. если вы попытаетесь include заголовок, используя:

<% include("partials/header") %>

вместо

<% include partials/header %>

, вы увидите, что нет вывода.

Что касается устаревшего синтаксиса include, то, по-видимому, ejs обрабатывает его одинаково внутри тегов <% и <%-.Если вы хотите продолжить изучение этого вопроса, может быть полезен просмотр исходного кода библиотеки: https://github.com/mde/ejs/blob/master/lib/ejs.js#L713

Или вы можете просто предпочесть новый синтаксис include, который, по-видимому, обеспечивает более согласованное поведение.

...