Symfony2附加表单类型模板中的javascript文件

时间:2014-07-21 08:59:18

标签: php jquery symfony twig

我使用jQuery插件imgAreaSelect(website)在Symfony2中创建一个图像裁剪器作为新的表单类型。在我的表单类型模板(imagecropper_widget.html.twig)中,我加载了jQuery和插件库。

由于jQuery也在我的base.html.twig中加载,插件库中的函数不再起作用了。 Firebug抛出“不是函数”错误。 如果我在base.html.twig中删除了jQuery,那么它运行良好,但当然这不是解决方案。

如果有一种方法可以将当时需要的javascript文件附加到javascripts块,那将会很棒。我试图从我的主题覆盖javascripts块,但Symfony抛出一个错误,因为我不使用或从另一个模板扩展。

有没有合法的方法将javascript文件附加到base.html.twig页面中的块?

base.html.twig中的Javascript块:

{% block javascripts %}
    {% javascripts '@jquery_js' '@bootstrap_js' filter='?yui_js' combine=true %}
        <script src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endblock %}

imagecropper_widget.html.twig

{% block imagecropper_widget %}
   {% spaceless %}
    <h2>Select the area</h2>
    <img src="http://localhost/project/web/test.jpg" id="imgc" style="width:100%" />

    {% block javascripts %}
        {% javascripts
        '@jquery_js'
        'bundles/imanagecmsfield/js/jquery.imgareaselect.js'
        'bundles/imanagecmsfield/js/process.js'
        filter="?yui_js"
        %}
        <script src="{{ asset_url }}"></script>
        {% endjavascripts %}

    {% endblock %}

  {% endspaceless %}
{% endblock %}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我通常不会在基本模板中放入 javascript块中的脚本和css文件。 Javascript块通常为空,位于基本模板的底部。

base.html.twig:

{% javascripts 'XXX' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

{% block javascripts %}{% endblock %}

这样,如果我添加特定于站点的脚本

,则不会覆盖任何内容

otherside.html.twig:

{% block javascripts %}
    {% javascripts %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}
    <script type="text/javascript">
        ;
    </script>
{% endblock %}

答案 1 :(得分:0)

如果您不介意拥有多个脚本标记(从而失去组合所有资源),您可以简单地覆盖javascripts块并像这样渲染父级:

{% block javascripts %}
{{ parent() }}
{% javascripts  
    '@AcmeDemoBundle/Resources/public/js/*.js'  
%}  
<script src="{{ asset_url }}"></script>  
{% endjavascripts %}  
{% endblock %}  

否则,您需要执行此处https://symfonybricks.com/en/brick/smart-use-of-assetic-to-compress-javascripts-and-stylesheets所述的更多工作,以使其真正可配置。

与实际将javascripts实际添加到配置数组的事件监听器结合使用,应该提供一个更可配置的解决方案,我想: - )。