我(仍然)尝试将 http://xoxco.com/clickable/jquery-tags-input 引入专用包中。到目前为止,我有一个类型作为文本的子级,还有一个数据转换器,可以将逗号分隔的字符串转换为对象数组,反之亦然。
现在我想用上面链接的 JQuery 代码来装饰文本字段。据我了解,我必须定义一个像
这样的块{% block manytomanycomboselector_widget %}
{% spaceless %}
{{ block('text_widget') }}
<script>
$(function(){
$("#{{ id }}").tagsInput();
});
</script>
{% endspaceless %}
{% endblock manytomanycomboselector_widget %}
在
[MyTypeBundle]Resources/views/Form/fields.html.twig
现在,StackOverflow的文档和这个问题的答案都表明我必须在使用表单的模板或
fields.html.twig
中的某处引用app/
,但这似乎不一定适用于其他字段类型包,尽管我在他们的代码中看不到原因。
除了此文件中的此块之外,我还必须在捆绑包内配置什么?
我也没有明白我必须在哪里放置 header 的 css 和 js 要求,以及如何处理像 jQuery 本身这样的一般要求。
我有同样的问题,我通过将我的字段模板合并到
twig.form.resources
参数中来解决它。
因此,在我的包的 DI 扩展 (MyBundle/DependencyInjection/MyBundleExtension.php) 中,我添加:
$container->setParameter('twig.form.resources', array_merge(
array('MyBundle:Form:field_widget.html.twig'),
$container->getParameter('twig.form.resources')
));
请注意,您的捆绑包必须在
TwigBundle
中的 AppKernel
之后注册。
编辑:
表单字段不链接到任何 JS 或 CSS。所以,IMO,你有两个解决方案。
首先,您直接将 JS 和 CSS 包装在字段模板中,并且您的包保持独立。
其次,您指示最终用户每次使用您的字段类型时都需要手动包含一些 JSS 和 CSS。
IoFormBundle 和 GenemuFormBundle 使用第二种解决方案,如其文档中的解释。