2012-01-07 18 views
10

Benim sorun:Symfony2'nin Assetic + Twig Şablon JavaScript Kalıtım

Ben 3 şablonlar vardır:

  • main.html.twig (ana düzen dosyası) bazı paket özgü JS içeren
  • layout.html.twig (bir paket belirli bir düzen geçersiz kılma etiketleri)
  • create.html.twig (ayrıca sayfaya özgü JS etiketlerini de içeren bir sayfaya özel şablon dosyası)

benim taban düzeni (main.html.twig) 'de 'javascript' adlı bir blok tanımlayan sonra geçersiz kılma (ancak layout.html.twig yılında {{ parent() }} arıyorum. Bu iyi çalışıyor ve ana şablon dosyasındaki JS etiketleri hala layout.html.twig şablonunun üst kısmında yer alıyor.

Sonra şöyle bloğu geçersiz kılma, create.html.twig dosyasında aynı şeyi: Bu noktada

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

yerine sadece tüm ebeveyn (layout.html.twig) javascript bloğunu geçersiz kılma ve dahil yukarıda şablonları tanımlanan komut, öyle aşağıdadır:

  • çünkü benimyılında, hataya neden oluyor çıkışı (ortasında <script> etiketlerini döker Sadece HTML işaretlemesi Sonra
  • o da

ben değilim (bunu beklediğiniz gibi) dışarı başkalarının kalanı ile birlikte komut döker sonunda jQuery kütüphane gibi amdosya komut dosyalarının create.html.twig şablonunun ortasına dökülmesine neden olduğundan emin olun, ve aynı zamanda neden ekrana iki kez atıldığına da kafam karışmışım (bir kez oluşturmanın ortasında ve sonra bir kez altta) Script'lerin geri kalanıyla main.html.twig ve layout.html.twig'dan.

Herhangi bir fikri olan var mı? Bir şey belirsiz ise veya biraz daha bilgi sağlayabilirsem haberim olsun.

DÜZENLEME:

Dosya içeriği ... aşağıda

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

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

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

EDIT 2:

Bu sabah konuya yeni bir bakışı görüyorum ve stil sayfaları için aynı şeyi yapıyor gibi görünüyor.Benim layout.html.twig yılında pagescripts adlı yeni blok tanımlamak ve sonra benim create.html.twig yılında blok kullanmaya çalıştı ama bu aynı sonucu vardı, sadece ben burada

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

Komut dosyası, sayfanın ortasına döküldüğünde '{{parent()}}' çıkışı da dahil mi? –

+0

sadece 'create.html.twig' dosyasındaki üç betiği yok – JamesHalsall

+0

@KrisWallsmith, Kris'i deneyebileceğim herhangi bir fikrin var mı? Gerekirse, sorunu olan dosyaların içeriğinin soyulmuş bir sürümünü yayınlayabilirim – JamesHalsall

cevap

2

Sorunu buldum. create.html.twig içinde, {% block javascripts %} içeriğimi, {% block content %} içimde tanımladım, bu nedenle Twig, content bloğunun içinde javascripts bloğunun çıktısını görüntülediğini varsayalım.

{% block content %} bloğu dışındaki {% block javascripts %} içeriğinin taşınması sorunu giderdi.

0

bir kullanmak her yerde senaryo ve stil dökümü gibi görünüyor main.html.twig örneği: En 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 %} 

hala sorun varsa

içine

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

    {% block jsscript %} 
    {% endblock %} 

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

, Bir belgeyi hazır fonksiyonuna ekleyebilirsiniz:

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

maalesef jQuery kütüphanesi yüklüyor ama sadece daha sonra Kütüphaneyi iki kere yüklemek istemiyorum ... eğer scriptlerim doğru yerde oluşturulmuşsa jquery kütüphanesi – JamesHalsall

+0

'jsscript' ==" javascriptscript "yapılmadan önce yüklenir mi? :) – NDM