10

我的问题:

我有 3 个模板:

  • main.html.twig(主布局文件)
  • layout.html.twig(一个特定于捆绑包的布局覆盖,其中包含一些特定于捆绑包的 JS 标记)
  • create.html.twig(一个特定于页面的模板文件,其中还包含一些特定于页面的 JS 标记)

我在我的基本布局 () 中定义了一个名为“javascript”的块,main.html.twig然后覆盖它(但{{ parent() }}layout.html.twig.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>标签(这会导致错误,因为在我的main.html.twig文件中,我只在 HTML 标记的末尾包含了 jQuery 库
  • 然后它还会将脚本与其他脚本一起转储(正如我所期望的那样)

我不确定是什么导致脚本被转储在create.html.twig模板中间,我也很困惑为什么它们被转储到屏幕两次(一次在创建中间,然后一次在底部以及来自main.html.twig和的所有其他脚本layout.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:

今天早上我一直在重新审视这个问题,它看起来好像对样式表做同样的事情。我试图定义一个在 my 中调用的新块pagescriptslayout.html.twig然后在 my 中使用该块,create.html.twig但这具有相同的结果,它似乎只是在我使用的任何地方转储脚本和样式表

{% block pagescripts %} 
   (scripts here) 
{% endblock}
4

2 回答 2

2

我发现了这个问题。在我在 my内部create.html.twig定义我的内容时,我假设 Twig 在块内渲染块的输出。{% block javascripts %}{% block content %}javascriptscontent

{% block javascripts %}内容移到{% block content %}块之外解决了这个问题。

于 2012-01-14T11:08:56.140 回答
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.
 });
于 2012-01-10T13:17:23.600 回答