Symfony2 Assetic + Twig Template Наследование JavaScript

Моя проблема:

У меня есть 3 шаблона:

  • main.html.twig (основной файл макета)
  • layout.html.twig (переопределение макета пакета, содержащее определенные JS-теги).
  • create.html.twig (файл шаблона страницы, который также содержит определенные JS-теги на странице)

Я определяю блок под названием "javascript" в своем базовом макете (main.html.twig), затем переопределяя его (но вызываю {{ parent() }} в layout.html.twig). Это отлично работает, а теги JS из основного файла шаблона все еще включены выше в шаблоне layout.html.twig.

Затем я делаю то же самое в файле create.html.twig, переопределяя блок следующим образом:

{% block javascripts %}
    {{ parent() }}
    {% javascripts '@BundleName/Resources/public/js/application.album.uploader.js'
                   '@BundleName/Resources/public/js/jquery.uploadify.js'
                   '@BundleName/Resources/public/js/swfuploadify.js' filter='?yui_js' %}
         <script src='{{ asset_url }}' type='text/javascript'></script>
    {% endjavascripts %}
{% endblock %}

В этот момент вместо того, чтобы просто перекрывать блок javascript в родительском (layout.html.twig) и включающий all скрипты, определенные в шаблонах выше него, он делает следующее:

  • Сбрасывает теги <script> в середине вывода (что вызывает ошибку, потому что в моем main.html.twig файле я включаю только библиотеку jQuery в конце разметки HTML
  • Затем он также выгружает скрипты вместе с остальными (как я ожидаю)

Я не уверен, что вызывает сброс скриптов в середине шаблона create.html.twig, и я также смущен тем, почему их дважды выгружают на экран (один раз в середине создайте, а затем один раз внизу, вместе со всеми остальными моими сценариями от main.html.twig и layout.html.twig.

Есть ли у кого-нибудь идеи? Дайте мне знать, если что-то неясно или я могу предоставить дополнительную информацию.

ИЗМЕНИТЬ:

Содержимое файла ниже...

main.html.twig: https://gist.github.com/7f29353eaca0947528ce

layout.html.twig: https://gist.github.com/734947e9118b7765715e

create.html.twig: https://gist.github.com/c60c8d5c61e00ff86912

ИЗМЕНИТЬ 2:

У меня сегодня был другой взгляд на проблему, и похоже, что он делает то же самое для таблиц стилей. Я попытался определить новый блок под названием pagescripts в моем layout.html.twig, а затем использовать блок в моем create.html.twig, но это имело тот же результат, он просто сбрасывает сценарии и таблицы стилей везде, где я использую

{% block pagescripts %} 
   (scripts here) 
{% endblock}

Ответ 1

Я нашел проблему. В create.html.twig я определял свой контент {% block javascripts %} внутри моего {% block content %}, поэтому я полагаю, что Twig визуализировал вывод блока javascripts внутри блока content.

Перемещение содержимого {% block javascripts %} вне блока {% block content %} устраняет проблему.

Ответ 2

Вот пример main.html.twig:

<body>
    {% block stylesheets %}
    {% endblock %}

    {% block jsscript %}
    {% endblock %}

    {% block content %}
    {% endblock %}
</body>

в ваш файл create.html.twig

{% extends '::base.html.twig' %}

{% block jsscript %}
    my javascript files...
{% endblock %}

{% block content %}
<h1>Create</h1>

<form action="{{ path('entity_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <p>
        <button type="submit">Create</button>
    </p>
</form>

 {% endblock %}

Если у вас все еще есть проблема, вы можете добавить функцию готовности документа:

$(document).ready(function() {
   // put all your jQuery goodness in here.
 });