2012-01-07 23 views
10

Mój problem:Symfony2 Assetic + Gałązka Szablon JavaScript Dziedziczenie

mam 3 szablony:

  • main.html.twig (główny plik layout)
  • layout.html.twig (specyficzny przesłanianie układ pakiet, który zawiera pewne wiązki specyficzny JS tagi)
  • create.html.twig (plik szablonu specyficzny dla strony, który zawiera również znaczniki JS specyficzne dla strony)

jestem definiowania bloku o nazwie „javascript” w moim układzie bazowym (main.html.twig), następnie przesłanianie go (ale nazywając {{ parent() }} w layout.html.twig. Działa to dobrze, a znaczniki JS z głównego pliku szablonu są nadal zawarte powyżej w szablonie layout.html.twig.

I potem zrobić to samo w pliku create.html.twig, przesłanianie blok następująco:

{% 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 %} 

W tym momencie, a nie tylko przesłanianie javascript blok w dominującej (layout.html.twig) włącznie wszystkie z skrypty zdefiniowane w szablonach nad nim, to wykonuje następujące operacje:

  • Zrzuca <script> tagi w środku wyjścia (co powoduje błąd, ponieważ w moim main.html.twig plik jestem w tym tylko biblioteki jQuery na koniec znaczników HTML
  • Wtedy też zrzuca skrypty się wraz z resztą innych (jak bym go do spodziewać)

nie jestem jasne, co powoduje wyrzucanie skryptów w środku szablonu create.html.twig i jestem także zdezorientowany, dlaczego zostały one porzucone na ekranie dwukrotnie (raz w środku kreacji, a następnie raz na dole wzdłuż z całą resztą moich skryptów z main.html.twig i layout.html.twig.

Czy ktoś ma jakieś pomysły? Daj mi znać, jeśli coś jest niejasne lub jeśli mogę podać więcej informacji.

EDIT:

zawartość pliku są poniżej ...

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

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

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

EDYCJA 2:

Tego ranka przyglądałem się temu zagadnieniu jeszcze raz i wygląda na to, że robi to samo z arkuszami stylów.Próbowałem zdefiniować nowy blok o nazwie pagescripts w moim layout.html.twig a następnie użyć bloku w moim create.html.twig ale miał taki sam wynik, to po prostu wydaje się zrzucić skryptów i stylów, gdziekolwiek używam

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

Kiedy znacznik skryptu jest porzucany na środku strony, czy zawiera on także dane wyjściowe '{{parent()}}? –

+0

nie tylko trzy skrypty w moim pliku 'create.html.twig' – JamesHalsall

+0

@KrisWallsmith wszelkie pomysły, które mogłyby ewentualnie wypróbować Kris? W razie potrzeby mogę opublikować obnażoną wersję zawartości plików, które mają problem – JamesHalsall

Odpowiedz

2

Znalazłem problem. W create.html.twig definiowałem moją zawartość {% block javascripts %} wewnątrz mojego {% block content %}, więc zakładam, że Twig renderował wyjście bloku javascripts wewnątrz bloku content.

Przeniesienie treści {% block javascripts %} poza blokiem {% block content %} rozwiązało problem.

0

Oto przykładem main.html.twig:

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

    {% block jsscript %} 
    {% endblock %} 

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

do swojej 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 %} 

Jeśli nadal masz problem, można dodać funkcję gotowości dokumentu:

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

niestety biblioteka jQuery wczytuje się, ale dopiero później, więc Nie chcę ładować biblioteki dwukrotnie ... jeśli moje znaczniki skryptów są renderowane we właściwym miejscu, biblioteka jquery zostanie załadowana zanim jakiekolwiek jej użycie zostanie wykonane – JamesHalsall

+0

'jsscript' ==" javascriptscript "? :) – NDM

Powiązane problemy