添加Symfony自定义字段

时间:2017-01-26 10:56:02

标签: forms symfony symfony-forms

在我的Symfony2项目中,我得到了一个参数列表:

https://maps.google.com/maps

但我有一个按钮"添加参数",创建一个新的< li> / li>带参数字段。问题是新的论点没有得到自定义标签" Name"。

编辑: 我用一个调用JS函数的buton添加参数来在页面上添加我的字段。然后,当我点击提交时,将其保存到数据库。

<ul class="arguments" data-prototype="{{ form_widget(form.arguments.vars.prototype)|e('html_attr') }}">
    {% for argument in form.arguments %}
        {#<li>{{ form_row(argument) }}</li>#}
        <li>
            {{ form_row(argument.name, {'label': 'Name'}) }}
            {{ form_row(argument.french_description) }}
            {{ form_row(argument.english_description) }}
            {{ form_row(argument.return) }}
            {{ form_row(argument.type) }}
        </li>
    {% endfor %}
</ul>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script type="text/javascript">
    $(document).ready(function() {
        var $container = $('div#name_of_your_div');

        var index = $container.find(':input').length;

        $('#add_argument').click(function(e) {
            addArgument($container);

            e.preventDefault();
            return false;
        });

        if (index == 0) {
            addArgument($container);
        } else {
            $container.children('div').each(function() {
                addDeleteLink($(this));
            });
        }

        function addArgument($container) {
            var template = $container.attr('data-prototype')
                            .replace(/__name__label__/g, 'Argument number' + (index+1))
                            .replace(/__name__/g,        index);

            var $prototype = $(template);

            addDeleteLink($prototype);

            $container.append($prototype);

            index++;
        }

        function addDeleteLink($prototype) {
            var $deleteLink = $('<a href="#" class="btn btn-danger">Delete</a>');

            $prototype.append($deleteLink);

            $deleteLink.click(function(e) {
                $prototype.remove();

                e.preventDefault();
                return false;
            });
        }
    });
</script>