2012-01-07 18 views
10

Il mio problema:Symfony2 Assetic + Ramoscello Template JavaScript Inheritance

ho 3 modelli:

  • main.html.twig (file di layout principale)
  • layout.html.twig (una specifica esclusione layout di pacchetto che contiene alcuni specifico bundle JS tags)
  • create.html.twig (un file modello specifico della pagina che contiene anche alcuni tag JS specifici della pagina)

Sto definendo un blocco chiamato "javascript" nel mio layout di base (main.html.twig), quindi sovrascritto (ma chiamando {{ parent() }} in layout.html.twig. Ciò funziona correttamente e i tag JS del file di modello principale sono ancora inclusi sopra quelli nel modello layout.html.twig.

Ho poi fare lo stesso nel file create.html.twig, ignorando il blocco come segue:

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

A questo punto, invece di override del blocco javascript nel genitore (layout.html.twig), compresi tutto il script definiti nei modelli di sopra di esso, lo fa il seguente:

  • scarica i <script> tag nel mezzo della produzione (che causa un errore, perché nella mia 01.236.519,100087 millionslima Sto solo tra cui la libreria jQuery alla fine il markup HTML
  • Poi discariche anche gli script fuori insieme al resto degli altri (come mi sarei aspettato a)

io non sono sicuro che cosa sta causando il dumping degli script nel mezzo del modello create.html.twig, e sono anche confuso sul motivo per cui vengono scaricati due volte sullo schermo (una volta nel mezzo della creazione e poi una volta in basso lungo con tutto il resto dei miei script da main.html.twig e layout.html.twig.

Qualcuno ha qualche idea? Fammi sapere se qualcosa non è chiaro o se posso fornire ulteriori informazioni.

EDIT:

contenuti di file sono al di sotto ...

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

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

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

MODIFICA 2:

Stamattina ho dato un'altra occhiata al problema e sembra che stia facendo la stessa cosa per i fogli di stile.Ho cercato di definire un nuovo blocco chiamato pagescripts nel mio layout.html.twig e quindi utilizzare il blocco della mia create.html.twig, ma questo ha avuto lo stesso risultato, a quanto pare solo per scaricare gli script e fogli di stile ovunque io uso il

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

Quando il tag di script viene scaricato nel mezzo della pagina include anche l'output '{{parent()}}'? –

+0

no solo i tre script nel mio file 'create.html.twig' – JamesHalsall

+0

@KrisWallsmith ci sono idee che potrei provare con Kris? Se necessario, posso pubblicare una versione ridotta del contenuto dei file che stanno avendo il problema. – JamesHalsall

risposta

2

Ho trovato il problema. In create.html.twig stavo definendo il mio contenuto di {% block javascripts %} all'interno del mio {% block content %}, quindi presumo che Twig stia rendendo l'output del blocco javascripts all'interno del blocco content.

Lo spostamento del contenuto di {% block javascripts %} all'esterno del blocco {% block content %} ha risolto il problema.

0

Ecco un esempio di main.html.twig:

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

    {% block jsscript %} 
    {% endblock %} 

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

nella vostra 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 %} 

Se avete ancora problema, è possibile aggiungere una funzione pronta per il documento:

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

sfortunatamente la libreria jQuery viene caricata ma solo più tardi, quindi Non voglio caricare la libreria due volte ... se i miei tag di script hanno eseguito il rendering nel posto corretto, la libreria jquery sarebbe stata caricata prima che ne venisse utilizzata ogni volta – JamesHalsall

+0

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

Problemi correlati