Javascript symfony表单集合:如何确定是否将allow_delete设置为true

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

我已经构建了一个javascript宏和一个表单主题,用symfony2在我的网站上呈现表单集合

{{如果定义了原型}},我添加了一个“添加按钮”。 到目前为止,我还有一个删除按钮

如果'allow_delete'未设置为true,我想删除此删除按钮,但我不知道如何在twig中找到此按钮


当我查看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&nbsp;&nbsp;<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 %}
    
    {%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%}
    
    {%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\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\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%}
    
    还有我的javascript:

    {% 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();
    }
    埃尔斯