2012-01-07 78 views
10

我的問題:Symfony2的Assetic +桂枝模板的JavaScript繼承

我有3個模板:

  • main.html.twig(主要佈局文件)
  • layout.html.twig(捆綁特定的佈局裏面包含一些捆綁特定JS覆蓋標籤)
  • create.html.twig(頁面特定的模板文件,其中還包含一些頁面特定的JS標籤)

我在我的基礎佈局(main.html.twig)中定義了一個名爲'javascript'的塊,然後覆蓋它(但在layout.html.twig中調用{{ parent() }}。這工作正常,主模板文件中的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文件我只包括在HTML標記
  • 那麼它也轉儲腳本出隨着他人休息(我希望它)

我不是結束jQuery庫確定是什麼導致腳本被轉儲到create.html.twig模板的中間,我也很困惑他們爲什麼被轉儲到屏幕兩次(一次在創建過程中,一次在底部)所有其餘的腳本從main.html.twiglayout.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:

今天早上我又一次看到了這個問題,看起來好像它爲樣式表做了同樣的事情。我想在我的layout.html.twig定義一個名爲pagescripts新的塊,然後使用塊在我create.html.twig但是這有相同的結果,它只是似乎無論我用

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

當script標籤被轉儲到頁面中間時,它是否也包含'{{parent()}}'輸出? – 2012-01-07 15:46:17

+0

只是我的'create.html.twig'文件中的三個腳本 – JamesHalsall 2012-01-07 17:36:30

+0

@KrisWallsmith任何想法,我可以嘗試克里斯?如果需要,我可以發佈一個精簡版的文件內容的問題 – JamesHalsall 2012-01-10 13:39:55

回答

2

我發現了這個問題。在create.html.twig中,我在我的{% block content %}裏面定義了我的{% block javascripts %}內容,所以我認爲Twig正在content塊內呈現javascripts塊的輸出。

移動{% block content %}塊之外的{% block javascripts %}內容固定的問題。

0

這裏是一個轉儲腳本和樣式例如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. 
}); 
+0

不幸的是,jQuery庫做負載,但只是到了後來,所以我不想兩次加載庫...如果我的腳本標記呈現在正確的位置jQuery庫將在任何使用它之前被加載 – JamesHalsall 2012-01-10 13:21:56

+0

'jsscript' ==「javascriptscript」? :) – NDM 2015-11-16 13:48:15