我遵循了名为“如何嵌入表单集合”的 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>