Javascript symfony表单集合:如何确定是否将allow_delete设置为true
我已经构建了一个javascript宏和一个表单主题,用symfony2在我的网站上呈现表单集合 {{如果定义了原型}},我添加了一个“添加按钮”。 到目前为止,我还有一个删除按钮 如果'allow_delete'未设置为true,我想删除此删除按钮,但我不知道如何在twig中找到此按钮Javascript symfony表单集合:如何确定是否将allow_delete设置为true,javascript,forms,symfony,Javascript,Forms,Symfony,我已经构建了一个javascript宏和一个表单主题,用symfony2在我的网站上呈现表单集合 {{如果定义了原型}},我添加了一个“添加按钮”。 到目前为止,我还有一个删除按钮 如果'allow_delete'未设置为true,我想删除此删除按钮,但我不知道如何在twig中找到此按钮 当我查看field.vars时,没有允许删除选项。field.vars.attr也不支持。如何执行此操作?允许删除选项是您的子表单字段 {% for widget in form.YOURFIELD.child
当我查看field.vars时,没有允许删除选项。field.vars.attr也不支持。如何执行此操作?允许删除选项是您的子表单字段
{% for widget in form.YOURFIELD.children %}
{% if widget.get('allow_delete') %}
//Do your stuff
{% endif %}
{% endfor %}
对于可能感兴趣的人,以下是我的完整解决方案:
- 集合呈现为表。标题是标签或字符串 复选框中的“选项”
- 如果在表单中设置了属性数据标签,则选项为
替换为数据标签的值 - 如果allow_add设置为true,则会添加一个add按钮
- 如果allow_delete设置为true,则添加删除按钮
{% block collection_widget %} {% spaceless %} <div class="collection"> {% if prototype is defined %} {% set attr = attr|merge({'data-prototype': block('collection_item_widget') }) %} {% endif %} {% if form.vars.allow_delete is defined and form.vars.allow_delete %} {% set allow_delete = true %} {% else %} {% set allow_delete = false %} {% endif %} <div {{ block('widget_container_attributes') }} class="protoype"> {% if prototype is defined %} <a href="#" class="add_button btn btn-default btn-sm">Ajouter <i class="fa fa-plus"></i></a> {% endif %} {{ form_errors(form) }} <table class="subtable table"> <thead> <tr class="headers" style="display: none;"> {% if form.children|length > 0 %} {% if form.children[0]|length > 0 %} {% set header = form.children[0] %} {{ block('collection_header') }} {% endif %} {% endif %} </tr> </thead> <tbody class="container_rows"> {% for rows in form %} {% spaceless %} {% if rows.children|length > 0 %} <tr class="row_to_delete child_collection"> {% set body = rows %} {{ block('collection_body') }} </tr> {% endif %} {% endspaceless %} {% endfor %} </tbody> </table> {#{{ form_rest(form) }}#} </div> </div> {% endspaceless %}
{%endblock集合\小部件%}{%block collection\u widget%} {%spaceless%} {%如果定义了原型%} {%set attr=attr | merge({'data-prototype':块('collection_item_widget')})%} {%endif%} {%如果定义了form.vars.allow_delete并且form.vars.allow_delete%} {%set allow_delete=true%} {%else%} {%set allow_delete=false%} {%endif%} {%如果定义了原型%} {%endif%} {{form_errors(form)}} {%if form.children | length>0%} {%if form.children[0]|长度>0%} {%set header=form.children[0]} {{block('collection_header')} {%endif%} {%endif%} {%用于格式为%]的行 {%spaceless%} {rows.children | length>0%} {%set body=rows%} {{block('collection_body')} {%endif%} {%endspaceless%} {%endfor%} {{{form#u rest(form)}}} {%endspaceless%}
{%block collection\u item\u widget%} {%set头=原型%} {%set body=prototype%} {%spaceless%} {{block('collection_body')} {%endspaceless%} {%endblock集合\项目\小部件%}{% block collection_header %} {% for field in header %} <th> {% if 'checkbox' not in field.vars.block_prefixes %} {{ form_label(field)|raw }} {% else %} {% if field.vars.attr['data-label'] is defined %} {{ field.vars.attr['data-label'] }} {% else %} Options {% endif %} {% endif %} </th> {% endfor %} {% if allow_delete %} <th class="fmu_table_center">Supprimer</th> {% endif %} {% endblock %} {% block collection_body %} {% set fieldNum = 1 %} {% for field in body %} <td class="field{{ fieldNum }} data-label"> {% if field.vars.attr['class'] is defined %} {% set class = field.vars.attr['class'] ~ ' input-sm' %} {% else %} {% set class = 'input-sm' %} {% endif %} {% set attr = field.vars.attr|merge({'class': class }) %} {{ form_widget(field, {'attr' : attr}) }} {{ form_errors(field) }} </td> {% set fieldNum = fieldNum + 1 %} {% endfor %} {% if allow_delete %} <td class="fmu_table_center fmu_table_middle"><a href="#" class="fmu_delete_button"><i class="fa fa-times"></i></a></td> {% endif %} {% endblock %}
{% block collection_header %} {% for field in header %} <th> {% if 'checkbox' not in field.vars.block_prefixes %} {{ form_label(field)|raw }} {% else %} {% if field.vars.attr['data-label'] is defined %} {{ field.vars.attr['data-label'] }} {% else %} Options {% endif %} {% endif %} </th> {% endfor %} {% if allow_delete %} <th class="fmu_table_center">Supprimer</th> {% endif %} {% endblock %} {% block collection_body %} {% set fieldNum = 1 %} {% for field in body %} <td class="field{{ fieldNum }} data-label"> {% if field.vars.attr['class'] is defined %} {% set class = field.vars.attr['class'] ~ ' input-sm' %} {% else %} {% set class = 'input-sm' %} {% endif %} {% set attr = field.vars.attr|merge({'class': class }) %} {{ form_widget(field, {'attr' : attr}) }} {{ form_errors(field) }} </td> {% set fieldNum = fieldNum + 1 %} {% endfor %} {% if allow_delete %} <td class="fmu_table_center fmu_table_middle"><a href="#" class="fmu_delete_button"><i class="fa fa-times"></i></a></td> {% endif %} {% endblock %}
还有我的javascript:{%block collection\u header%} {header%中字段的%s} {%if'checkbox'不在field.vars.block_前缀%} {{form_标签(字段){raw}} {%else%} {%if field.vars.attr['data-label']已定义%} {{field.vars.attr['data-label']} {%else%} 选择权 {%endif%} {%endif%} {%endfor%} {%if allow_delete%} 供给者 {%endif%} {%endblock%} {%block collection_body%} {%set fieldNum=1%} {正文%中字段的%s} {%如果定义了field.vars.attr['class'],则为%} {%set class=field.vars.attr['class']~'输入sm%} {%else%} {%set类='输入sm%} {%endif%} {%set attr=field.vars.attr | merge({'class':class})%} {{form_小部件(字段,{'attr':attr}}} {{form_errors(field)}} {%set fieldNum=fieldNum+1%} {%endfor%} {%if allow_delete%} {%endif%} {%endblock%}
{% macro javascript_form_collection() %} {#ass the necessary javascript to handle a collection#} <script> $(function() { $('.collection').each(function(){ var $container = $(this).children('div:first-child'); var $addButton = $container.children('.add_button').eq(0); $addButton.on('click', function(e) { addElement($container,index); count++; index++; showHeaders($container, count); e.preventDefault(); return false; }); var count = $container.find('.child_collection').length; var index = $container.find('.child_collection').length; if (count == 0) { populateHeaders($container) } $container.on('click','.fmu_delete_button', function(e){ e.preventDefault(); var $row = $(this).closest('.row_to_delete'); $row.next('.sibling_row_to_delete').remove(); $row.next('.sibling_row_to_delete_2').remove(); $row.remove(); count--; showHeaders($container, count); }); showHeaders($container, count); }); function populateHeaders($container) { var $headers = $container.find('.headers').eq(0); var $prototype = $($container.attr('data-prototype')); var $headerPrototype = $($prototype[0]).attr('data-label'); $headers.html($headerPrototype); } function showHeaders($container, count) { if (count > 0) { $container.find('.subtable .headers').show(); } else { $container.find('.subtable .headers').hide(); } } function addElement($container, index) { var $prototype = $($container.attr('data-prototype') .replace(/__name__label__/g, 'n°' + (index+1)) .replace(/__name__/g, index)); $container.find('.container_rows').eq(0).append($prototype); $('.timepicker').timepicker(); $('.datetimepicker').datetimepicker(); $prototype.find('.select2').each(function(){ $(this).select2(); }); $('[data-toggle="tooltip"]').tooltip(); return $prototype; } }); </script> <style type="text/css"> .subtable { width: 100%; } .subtable th { font-weight: normal; } </style> {% endmacro %}
{%macro javascript\u form\u collection()%} {#使用处理集合所需的javascript} $(函数(){ $('.collection')。每个(函数(){ var$container=$(this.children('div:first child'); var$addButton=$container.children('.add_按钮').eq(0); $addButton.on('click',函数(e){ 附录(容器、索引); 计数++; 索引++; 显示标题($container,count); e、 预防默认值(); 返回false; }); var count=$container.find('.child_collection').length; var index=$container.find('.child_collection').length; 如果(计数=0) { populateHeaders($container) } $container.on('click','fmu_delete_button',函数(e){ e、 预防默认值(); var$row=$(this).最近('.row_to_delete'); $row.next('.sibling_row_to_delete').remove(); $row.next('.sibling_row_to_delete_2').remove(); $row.remove(); 计数--; 显示标题($container,count); }); 显示标题($container,count); }); 函数populateHeaders($container) { var$headers=$container.find('.headers').eq(0); var$prototype=$($container.attr('data-prototype')); var$headerPrototype=$($prototype[0]).attr('data-label'); $headers.html($headerPrototype); } 函数showHeaders($container,count) { 如果(计数>0) { $container.find('.subtable.headers').show(); } 埃尔斯