使用“高级”AJAX改进“remote_function”

时间:2011-03-27 02:53:13

标签: ruby-on-rails ruby ajax ruby-on-rails-3 methods

我正在使用Ruby on Rails 3,我正在尝试使用remote_function方法改进视图文件中的AJAX请求。当鼠标指针位于Fire AJAX上方时,以下代码将显示文本<div id="test_id_div">...</div>,并在单击Fire AJAX时调用操作控制器方法。

在视图文件中我有:

<div id="test_id_div">
  <span id="test_id_span" %> style="display: none">
    <%= link_to_function 'Fire AJAX', remote_function(:url => {:action => :action_method_name, :controller => 'controller_name'}) %>
  </span>

  <%=
    update_page_tag do |page|
      page.event.observe("test_id_div", 'mouseover') do |element|
        element[("test_id_span").to_sym].show
      end
      page.event.observe("test_id_div", 'mouseout') do |element|
        element[("test_id_span").to_sym].hide
      end
    end
  %>
</div>

上面的代码有效,但是我希望以某种“更好”的方式改进它(例如:编写更少的代码,......)。 我怎么能这样做?


PS :在我的情况下,Fire AJAX会调用一个动作控制器方法来更新数据库中的记录,所以我想知道我应该知道什么是安全问题太

1 个答案:

答案 0 :(得分:0)

mouseover/out效果是什么,这可以通过一些CSS实现(IE6不支持):

<强> ERB:

<div id="test_id_div">
  <span id="test_id_span" %>>
    <%= link_to_function 'Fire AJAX', remote_function(:url => {:action => :action_method_name, :controller => 'controller_name'}) %>
  </span>
</div>

<强> CSS:

#test_id_div span { display: none; }
#test_id_div:hover span { display: block; }

我既不使用Prototype也不使用相关的帮助器,但是我很确定你在这种情况下也应该能够使用link_to… :remote => true,因为你似乎没有使用本地JS功能:

<%= link_to 'Fire AJAX', :action => :action_method_name, :controller => 'controller_name', :remote => true %>

为了进一步简化:如果你想简单地隐藏/显示链接,为什么不摆脱一个容器呢?

<div id="test_id_div">
  <%= link_to 'Fire AJAX', :action => :action_method_name, :controller => 'controller_name', :remote => true %>
</div>

#test_id_div a { display: none; }
#test_id_div:hover a { display: block; }

我希望我没有在某个地方误解你,但这应该可以解决问题。