在我的一些页面上,我想嵌入一个工具栏,其中包含一些通用功能,如共享,报告和书签。目前我这样做
{# 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之前的页面底部加载。意思是,在我的工具栏模板中,我无法访问它们。
所以我想到了以下我不满意的解决方案:
代码:
{# 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>