2012-01-07 5 views
10

私の問題:Symfony2のAssetic + TwigのテンプレートはJavaScriptの継承

私は3つのテンプレートがあります。

  • main.html.twig(メインレイアウトファイル)
  • layout.html.twig(一部のバンドル特定のJSを含むバンドル特定のレイアウトのオーバーライドをタグ)
  • create.html.twig(特定のページ固有のJSタグを含むページ固有のテンプレートファイル)

基本レイアウト(main.html.twig)に「javascript」というブロックを定義してから、それを上書きします(ただし、{{ 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 %} 

、だけではなく、すべての親(layout.html.twig)にjavascriptのブロックをオーバーライドし、を含みますそれ以上のテンプレートで定義されたスクリプトが、それは次のようん:

  • があるため、私で、エラーが発生した(出力の途中で<script>タグをダンプ私は、HTMLマークアップその後
  • それはまた

私はないです(私はそれには期待通り)を他人の残りの部分と一緒にスクリプトをダンプの最後にjQueryライブラリを含めていますファイルcreate.html.twigテンプレートの途中でスクリプトがダンプされていることを確認してください。また、スクリーンに2回ダンプされている理由についても混乱しています(1回は作成の途中で、もう1回は残りのスクリプトはすべてmain.html.twiglayout.html.twigです。

誰にもアイデアはありますか?不明な点がある場合や、さらに詳しい情報を提供できるかどうかを教えてください。

EDIT:

ファイルの内容は以下の通りです...

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:

私は今朝問題をもう一度見てきましたが、スタイルシートについても同じことをしているように見えます。私は私のlayout.html.twigpagescriptsと呼ばれる新しいブロックを定義し、私のcreate.html.twigにブロックを使用しようとしたが、これは同じ結果を持っていた、ちょうど私がここで

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

スクリプトタグがページの途中でダンプされると、 '{{parent()}}'の出力も含まれますか? –

+0

私の 'create.html.twig'ファイルには3つのスクリプトしかありません。 – JamesHalsall

+0

@KrisWallsmith私はおそらくクリスを試すことができますか?必要な場合は、問題が発生しているファイルの内容を削除したバージョンを投稿することができます。 – JamesHalsall

答えて

2

私は問題を発見しました。 create.html.twigで私の{% block content %}の中に私の{% block javascripts %}の内容を定義していたので、Twigはcontentブロック内のjavascriptsブロックの出力をレンダリングしていると仮定します。

{% block content %}ブロック外の{% block javascripts %}コンテンツを移動すると、問題が修正されました。

0

をされる使用場所にスクリプトとスタイルシートをダンプするようですmain.html.twigの例:あなたの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 %} 

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

    {% block jsscript %} 
    {% endblock %} 

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

あなたはまだ問題がある場合は、

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

残念ながら、jQueryライブラリはロードしますが、後で実行するだけです私はライブラリを2回ロードしたくありません...スクリプトタグを正しい場所にレンダリングすると、jqueryライブラリを使用する前にロードされます。 – JamesHalsall

+0

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