Symfony2 Twig:嵌入模板 - 放置JS的位置

时间:2015-10-23 07:52:51

标签: symfony twig

在我的一些页面上,我想嵌入一个工具栏,其中包含一些通用功能,如共享,报告和书签。目前我这样做

{# page-detail.html.twig #}
{% extends 'layout.responsive.html.twig' %}

{% block content %}
    {% include "toolbar/index.html.twig" with {'foo':'bar'} %}
    {# further content... #}
{% endblock %}

由于工具栏的功能需要有关嵌入的上下文的一些信息,因此我在with子句中传递此信息。到目前为止一切都很好。

现在,所有按钮都在点击时调用一些JavaScript。弹出模态窗口,显示对话框等。我想将相关的JS放在工具栏模板中,但问题出在这里:

我的所有JS库都在关闭body-tag之前的页面底部加载。意思是,在我的工具栏模板中,我无法访问它们。

所以我想到了以下我不满意的解决方案:

  • 将JS库的包含移到顶部(加载js减慢页面显示,JS也会分散)
  • 将相应的JS放在“page-detail.html.twig”的javascripts-block中(工具栏代码与模板代码分开,并与需要的JS-Code混合)
  • 使用“embed”-Tag并在工具栏中定义一个JS-Block-Template(不会有帮助,因为我只能在“embed”-Tag中访问嵌入父模板中的块)
  • 使用“use”-Tag代替。那么这听起来最好,但是,Code看起来像这样(假设工具栏模板定义了块“toolbar_content”和“toolbar_js”):

代码:

{# page-detail.html.twig #}
{% extends 'layout.responsive.html.twig' %}
{% use "toolbar/index.html.twig" %}

{% block content %}
    {% block toolbar_content %}
        {{ parent() }}
    {% endblock %}
    {# further content... #}
{% endblock %}

{% block javascripts %}
    {{ parent() }}
    {% block toolbar_js %}
        {{ parent() }}
    {% endblock %}
    ... local JS
{% endblock %}

同样在这个解决方案中,我不能再使用“with”-clause传递环境变量,因为它现在用于解决块的名称冲突。

我觉得我错过了什么。怎么做对了?这似乎是一项普遍的任务。

其他信息

我认为这个问题不是必不可少的,但为了更清晰,这里是我的布局模板的样子(不完整的相关块)。

{# layout.responsive.html.twig #}
{% block stylesheets %}
     {# bootstrap.css, custom.css, ... #}    
{% endblock %}

{% block content %}
{% endblock %}

{% block javascripts %}
     {# jquery, bootstrap, ... #}
{% endblock %}

我的工具栏:

{# toolbar/index.html.twig #}
<div class="toolbar btn-toolbar" role="toolbar">
    <div class="btn-group" role="group">
      <button type="button" class="btn btn-default" data-toggle="modal" data-target="#report">Report</button>
    </div>
    <!-- more buttons -->
</div>

0 个答案:

没有答案