Symfony2 Assetic + Шаблон Twig Наследование JavaScript - PullRequest
10 голосов
/ 07 января 2012

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

У меня есть 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)и включая все сценарии, определенные в шаблонах над ним, он выполняет следующие действия:

  • Сбрасывает теги <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}

Ответы [ 2 ]

2 голосов
/ 14 января 2012

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

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

0 голосов
/ 10 января 2012

Вот пример 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.
 });
...