0

我正在使用 Symfony2,我有一个带有按钮的项目列表,可以编辑每个项目旁边的项目。像这样的东西

项目 1 | 编辑

项目 2 | 编辑

项目 3 | 编辑

在同一页面上是编辑表单,但它是隐藏的,当您单击按钮编辑项目时,它会在 js 中可见。问题是您仍然在同一页面上,并且对于每个项目,表单应该填充不同的对象。你知道如何实现这一点,因为当 url 没有改变时,我不知道如何调用不同的控制器。非常感谢您!:)

JS:

$(".editItem").on('click', function(){

    $(".show").toggle();
    return false;

});
4

2 回答 2

1

许多解决方案:

  • 只有一个控制器并向他发送带有要编辑的元素 ID 的隐藏输入;
  • 单击编辑链接时,使用 javascript 设置相应的操作属性。

如果我们使用第一种方法,我们所做的是使用 ajax 或表单检索当前项目,假设您的编辑链接如下所示:

<a href="{{ path("url", {id: myid}) }}" data-id="{{ myid }}">Edit</a>

在 javascript 中,我们这样做:

$('.editItem').click(function(e) {

   // We avoid the default behaviour (ie following the link)
   e.preventDefault();

   // We load the form with ajax
   $('.show').load('', {id: $(this).attr('data-id')});
});

然后在您的控制器中(显示当前视图的控制器):

 if($request->isXmlHttpRequest()) {
     $myid = $request->query->get('id'); // Could be $request->request


     $entity = $em->getRepository('...')->getOneById($myid);

     return $this->render('form.html.twig', array('entity' => $entity));

 }
于 2013-07-19T05:58:03.723 回答
1

这是我过去使用的一种方法:

然后,当您调用视图时,您可以呈现表单,它会自动附加子表单。然后你的 JS 只需要打开/关闭适当的表单。

在处理表单时,您需要将它们全部拥有,因此最好有某种方法来识别刚刚编辑的元素。

您还会遇到标签问题 - 这只是摆弄主题的情况。

于 2013-07-20T04:16:27.727 回答