Передача информации из Twig в JavaScript
Дата обновления перевода 2024-07-25
Передача информации из Twig в JavaScript
В приложениях Symfony вы можете обнаружить, что вам нужно передать некоторые
динамические данные (например, данные ипользователя) из Twig в ваш JavaScript
код. Отличным способом передачи динамической конфигурации является хранение
ниформации в атрибутах data
и считывание её позже в JavaScript. Например:
1 2 3 4 5 6
<div class="js-user-rating"
data-is-authenticated="{{ app.user ? 'true' : 'false' }}"
data-user="{{ app.user|serialize(format = 'json') }}"
>
<!-- ... -->
</div>
Получите это в JavaScript:
1 2 3 4 5 6 7 8
document.addEventListener('DOMContentLoaded', function() {
var userRating = document.querySelector('.js-user-rating');
var isAuthenticated = userRating.dataset.isAuthenticated;
var user = JSON.parse(userRating.dataset.user);
// или с jQuery
//var isAuthenticated = $('.js-user-rating').data('isAuthenticated');
});
Note
При доступе к атрибутам данных из JavaScript, имена атрибутов преобразуются
из стиля с дефисами в camelCase. Например, data-is-authenticated
становится
isAuthenticated
, а data-number-of-reviews
- numberOfReviews
.
Лимита размера для значения атрибутов data-
нет, так что вы можете хранить
любое содержимое. В Twig, используйте стратегию экранирования html_attr
,
чтобы избежать порчи HTML-атрибутов. Например, если ваш объект User
имеет
некоторый метод getProfileData()
, возвращающий массив, то вы можете сделать
следующее:
1 2 3
<div data-user-profile="{{ app.user ? app.user.profileData|json_encode|e('html_attr') : '' }}">
<!-- ... -->
</div>