2013-07-19 46 views
0

我使用的是Symfony2,我有一个项目列表以及一个按钮,用于编辑每个项目旁边的项目。像这样的东西使用一种形式编辑同一页上的不同项目 - Symfony2

项目1 | 编辑

项目2 | 编辑

项目3 | 编辑

在同一页上是编辑的窗体,但它是隐藏的,当你点击一个按钮来编辑一个项目时,它变得可见的JS。问题是,你仍然在同一页面上,并且每个项目都应该填入不同的对象。你有什么想法如何实现这一点,因为当url不变时,我不知道如何调用不同的控制器。非常感谢您提前! :)

JS:

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

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

}); 
+0

当你说“变得可见”时,你是在谈论从服务器加载html?填充隐藏的表单与相应的数据? – gpichot

+0

我的意思是它隐藏着css,当你点击按钮时,一个js脚本会使它看起来有一个动画,并且你已经可以看到它,但是一切都在frond端,页面保持不变,形式是在点击链接之前,它只是隐形。 – Faery

+0

所有项目的一种形式或每种项目的一种形式? – gpichot

回答

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)); 

} 
+0

您可以提供一些关于第一个解决方案的更多信息。我的编辑链接是这样的:'Edit',我给ID到控制器,但我不希望整个页面改变,只需单击时显示的表单中的信息。 – Faery

+0

非常感谢!我一直在尝试这个,但问题是如果我点击Item1的编辑按钮,它将被填充到窗体的下一个窗口中,而不是当前的窗体中。例如,现在窗体中填充了关于Item1的信息,然后单击编辑Item2 - 当窗体打开时,它将可以再次使用Item1填充,但下一次单击版本的任何链接时 - 表单将包含有关Item2的信息(上一次单击的链接) 有任何想法吗? :( – Faery

+0

查看jQuery.get及其“成功”选项(您可以在其中将数据附加到页面中)。您还可以使用developper控制台进行调试,并查找在网络面板中发送到服务器的内容。 – gpichot

1

下面是我在过去使用的方法:

然后,当你打电话给你看,你可以渲染的形式,它会自动连接有子的形式。您的JS然后只需要打开/关闭适当的表单。

当涉及到处理表单时,您需要将它们全部取出,因此如果您有一些方法可以识别哪些元素已被编辑,那么最好。

你也会遇到标签麻烦 - 这只是一个摆脱主题的例子。

相关问题