在Symfony2表单小部件中包含Javascript

时间:2013-10-04 15:34:56

标签: javascript forms symfony widget

我创建了自己的小型Symfony2表单类型。为了使其正常工作,我需要包含一个js库。虽然在单个Web应用程序中使用这种新表单类型时这是一项简单的任务,但当我决定将该表单类型移动到专用包以使其可重用时,它变得更加困难。

目前,我知道两种可能的解决方案

1)让每个使用我的包的人都在他们的base.html.twig

中添加一行

2)添加<script>标记以将库嵌入到表单小部件

他们两个都不是很聪明,所以我的问题是:我该如何做得更好?特别是,如果我的表单类型可以在一个页面上多次包含。更糟糕的是,如果我的表格类型要求例如JQuery存在,但我不知道,如果JQuery已经加载到应用程序中。

1 个答案:

答案 0 :(得分:0)

由于您没有任何关于捆绑包用户实际包含JS的位置的控制(我知道::base.html.twig文件中没有包含它们的项目,但是在名为{{1}的文件中在应用程序的主要包中),一个好方法是提供一个JavaScript文件,然后可以通过Assetic包含,如下所示:

layout.html.twig

因此,您基本上只需将所需内容存储在{% javascripts debug=false output="js/bundles.js" '@YourVendorAndBundleName/Resources/public/js/formtype.js' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %} 中的一个文件中。 symfony2命令{yourBundle}/Resources/public/js将完成其余的工作。

通过这种方式,用户可以将JS与其他供应商JS一起存储在一个文件中,并使用它来做更多的事情,如缩小等。

重要说明:请务必将其添加到安装/使用指南中。


如果您的JS代码依赖于第三方JS库(如jQuery),则不应添加它们,因为Symfony2 Cookbook说:http://symfony.com/doc/master/cookbook/bundles/best_practices.html#vendors

相反,您可能需要具有特定名称的特定资产,如此处所述:Managing common javascript dependencies in Symfony 2