0

我有一个页面,我在其中从一系列选择框中动态添加元素。我正在使用 RJS 来执行此操作,并且效果很好。现在,div 中的这些元素是一系列带有删除按钮的元素,以防用户想要删除文本区域。这是我碰壁的地方。

这是运行删除按钮的代码。据我所知,这很好用:

<%= link_to image_tag("/images/button_delete.gif", :alt=>"Delete"), :controller=>"report", :action=>"remove", :id=>@sentence.id %>

在我的报表控制器中,上面的代码调用了这个非常简单的方法:

def remove @sentence_id = params[:id] end

同样,我认为这是有效的。现在,当我通过点击按钮激活此操作时,我们转到 RJS 文件 remove.rjs:

page.remove 'sentence_'+@sentence_id

这就是我在浏览器中得到的,而不是一个愉快地删除的元素!

try 
{
     Element.remove("sentence_63");
} 
catch (e) 
{ 
     alert('RJS error:\n\n' + e.toString()); 
     alert('Element.remove(\"sentence_63\");'); 
     throw e; 
}

我的理解是,当当前上下文中没有页面时会发生这种情况。这方面的在线文档有点薄。

任何帮助表示赞赏!干杯,亚伦。

4

3 回答 3

1

尝试链接到远程。这将为您构建 ajax 调用,并应从页面中删除该元素。

然后 link_to_remote 语法与 link_to 语法略有不同,所以也不要让你绊倒。

于 2009-05-12T21:46:08.383 回答
0

您的删除链接设置为普通链接,即

<a href="/report/remove" id="sentence_63">
  <img src="/images/button_delete.gif" alt="Delete" />
</a>

这会触发一个正常的 HTTP 请求。由于您的意图是触发 AJAX 请求,请尝试 PJ Davis 的推荐并使用link_to_remote

于 2009-05-12T22:04:43.440 回答
0

由于您的remove函数似乎并未真正删除记录,因此如果您只想从页面中删除 HTML 元素,您可以使用Elementslink_to_function的 Prototyperemove()方法。此外,如果您有最新版本的 Rails(例如 2.3.2),您可以利用dom_id帮助程序自动生成sentance_idID 属性

<%= link_to_function(image_tag("button_delete.gif", :alt=>"Delete"), "$('#{dom_id(@sentence}').remove();" %>

像这样的方法可以帮助减少控制器中的方法数量(除非您打算在控制器中做其他事情)

于 2009-05-12T22:13:02.723 回答