Разделение файла JavaScripts в шаблонах symfony4 twig

У меня вопрос о том, как отделить файл javascript с указанием загрузки от файла ветки шаблона.

У меня есть, например, admin.html.twig, который расширяет base.html.twig, в базе я получил

   {% block javascripts %}

      <script src = "/assets/js/core/jquery.min.js"></script>
      <script src = "/assets/js/core/popper.min.js"></script>
      <script src = "/assets/js/core/bootstrap-material-design.min.js"></script>
      <script src = "/assets/js/plugins/perfect-scrollbar.jquery.min.js"></script>

      <script async defer src = "https://buttons.github.io/buttons.j"></script>
      <script src = "/assets/js/plugins/chartist.min.js"></script>
      <script src = "/assets/js/plugins/bootstrap-notify.js"></script>
      <script src = "/assets/js/material-dashboard.min.js"></script>
      <script src = "/assets/demo/jquery.sharrre.js"></script>
      <script src = "/assets/js/sparkline.js"></script>
      <script src = "/assets/js/plugins/chartjs.min.js"></script>
    {% endblock %}

и у меня есть следующий файл, например dashboard.html.twig, который расширяет файл admin.html.twig, и мой вопрос в том, что в файле dashboard.html.twig я получил небольшой написанный самим собой небольшой код javascript, и этот javascript из Конечно, используйте библиотеку jquery, но эту библиотеку я загрузил в файл base.html.twig, следующий из моего самописного скрипта, который находится в dashboard.html.twig.

Мой вопрос в том, как я могу, например, загрузить свой небольшой код javascript (конечно, я могу сохранить его в отдельном файле, например mycode.js), но как загружать только тогда, когда этот маршрут файла dashboard.html.twig я использовал, и после jquery загружается? Потому что в других маршрутизаторах я dont need this mycode.js so I dont хочу поместить его в файл base.html.twig в блоке javascript, есть идея?

На мой взгляд, чтобы помочь другим, вопрос мог бы быть следующим: How to separate page specific JavaScripts files in symfony4 twig templates? Спасибо!

Azhar Khattak 06.09.2018 21:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
51
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если dashboard напрямую расширяет admin, то вы можете сделать следующее, чтобы гарантировать загрузку всех скриптов администратора и добавить специфический скрипт dashboard:

{% extends "admin.html.twig" %}
{% block javascripts %}
    {{ parent() }} {# execute the parent block, thus loading all scripts in admin #}
    <script src = "/assets/js/dashboard/mycode.js"></script>
{% endblock %}
Ответ принят как подходящий

Можно нырять

{% extends "admin.html.twig" %} {# use only in case your all templates are at the same places like app/Resources/views/admin.html.twig #}
{% block javascripts %}
    {{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
    <script src = "/assets/js/dashboard/code.js"></script>
{% endblock %}

если вы пытаетесь расширить шаблон из другого пакета, вы можете использовать этот

{% extends "YourBundleName:Default:admin.html.twig" %} {# YourControllerRelativeName just in case your view structure is like views/Default/admin.html.twig#}
    {% block javascripts %}
        {{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
        <script src = "/assets/js/dashboard/code.js"></script>
    {% endblock %}

для лучшего понимания вам следует здесь немного прочитать: https://symfony.com/doc/2.8/templating.html Примечание: - в документах вы должны изменить версию в соответствии с вашей текущей версией.

Я бы предложил следующее решение.

  1. Объявите следующий блок в base.html.twig после {% block javascripts %}{% endblock %}

    {% block javascript_page %}{# specific code for current page #}{% endblock %}

  2. Затем на своей странице вы можете включить скрипты для конкретной страницы.

    {% extends "admin.html.twig" %} или {% extends "base.html.twig" %}

    {% block javascript_page %} <script src = "/assets/js/pages/my_page.js"></script> {% endblock %}

Хотя ответ DarkBee также верен, но таким образом вам не нужно беспокоиться о вызове {{ parent() }} на каждой странице.

Спасибо за все ответы! отлично, да, мне нужно прочитать о ветке шаблонов

flow 08.09.2018 12:57

Другие вопросы по теме