0

我遵循了名为“如何嵌入表单集合”的 Symfony 食谱部分,并添加了这个 javascript 函数以具有添加新标签字段的链接。表单是正确的,显示任务描述字段和一个标签名称字段。

当我点击链接时,什么也没有发生。JS代码显示在我页面的源代码中。顺便说一句,Netbeans 在我的链接中告诉我“预期的分号;在 ) 之后添加标签

这是我的控制器代码:

public function addTaskAction()
    {
        $task = new Task();
        $task->addTag(new Tag());

        $form = $this->createForm(new TaskType(), $task);

        $request = $this->get('request');
        if ($request->getMethod() === 'POST') {
            $form->bind($request);
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($task);
                $em->flush();

            return $this->redirect($this->generateUrl('mytask_task',
                array('id' => $task->getId())));
            }
        }    
        return $this->render('MyTaskBundle:Question:taskadd.html.twig',
            array(
                'form' => $form->createView()
            ));
    }

还有我的 form.html.twig :

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">     
    var collectionHolder = $('ul.tags');
    var $addTagLink = $('<a href="#" class="add_tag_link">Add a tag</a>');
    var $newLinkLi = $('<li></li>').append($addTagLink);

    jQuery(document).ready(function() {
        collectionHolder.append($newLinkLi);
        $addTagLink.on('click', function(e) {
            e.preventDefault();
            addTagForm(collectionHolder, $newLinkLi);
        });
        collectionHolder.find('li').each(function() {
            addTagFormDeleteLink($(this));
        });
    });
    function addTagForm(collectionHolder, $newLinkLi) {
        var prototype = collectionHolder.attr('data-prototype');
        var newForm = prototype.replace(/__name__/g,
 collectionHolder.children().length);
        var $newFormLi = $('<li></li>').append(newForm);
        $newLinkLi.before($newFormLi);

    }

    }       
</script>

    <form method="post" {{ form_enctype(form) }}>
    {{ form_row(form.description) }}

    <h3>Tags</h3>

    <ul class="tags" data-prototype="{{ form_widget(form.tags.vars.prototype)|e }}">
    {% for tag in form.tags %}
        <li>{{ form_row(tag.name) }}</li>
    {% endfor %}
            <a href="#" class="add_tag_link" onclick="addTagForm()">Add a tag</a>
    </ul>

    {{ form_rest(form) }}
    <input type="submit" class="btn btn-primary" />
    </form>
4

1 回答 1

0

我终于在这个视频中找到了一个更简单的 JS 代码:http: //www.mistra.fr/tutoriel-symfony-2-les-formulaires-imbriques.html,它工作正常!

   $(function(){
         var index = 0;
         var prototype = $('ul.answer').data('prototype');
         $('#addmore').on('click', function(){
             var newForm = prototype.replace(/__name__/g, index++);
             var newLi = $('<li></li>');

             newLi.append(newForm);
             $(this).before(newLi);
         });
     });
于 2013-11-08T15:16:27.047 回答