我已经按照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>
答案 0 :(得分: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);
});
});