RJS方法输出原始javascript

时间:2009-05-12 21:10:42

标签: ruby-on-rails rjs

我有一个页面,我从一系列选择框动态添加元素。我正在使用RJS来做这件事,而且效果很好。现在,div中的这些元素是一系列伴随Delete按钮的元素,以防用户想要删除textarea。这就是我撞墙的地方。

这是运行“删除”按钮的代码。这对我的知识很有用:

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

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

def删除    @sentence_id = params [:id] 端

同样,我认为这是有效的。现在,当我按下按钮激活此操作时,关闭我们转到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; 
}

我的理解是当当前上下文中没有页面时会发生这种情况。关于此的在线文档很简单。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

触发正常的HTTP请求。由于您的意图是触发AJAX请求,请尝试PJ Davis的建议并使用link_to_remote

答案 2 :(得分:0)

由于您的remove功能似乎没有真正删除记录,如果您只想从页面中删除HTML元素,则可以使用原型remove() methodlink_to_function元素。此外,如果您有最新版本的Rails(例如,2.3.2),则可以利用dom_id helper自动生成sentance_id ID属性

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

这样的方法可以帮助控制控制器中的方法数量(除非您打算在控制器中执行其他操作)