Rails / Unobtrusive Javascript - link_to_remote:update

时间:2013-08-02 09:52:56

标签: javascript ruby-on-rails ruby ajax render

环顾四周(很多)我已经挖掘了很多关于这个主题的帖子,但是我真的很困惑,因为这个问题似乎主要是在一段时间后(当变化发生时)被解决并且很少与事情如何匹配正在寻找今天。

所以,我正在尝试将Rails 2.1应用程序更新为3.2 - 并且遇到了已弃用的link_to_remote函数。我意识到它被link_to取代:remote =>是的,但这并没有真正回答我的问题。

我正在处理的应用程序正在使用大量的原型魔法来进行页面内渲染,如下所示:

在/acl/main.html.erb中:

<table width=95%>
<tr><td align=center valign=top width=30%> <!-- Employees List -->

    <%= render(:partial => "employee_list") %>


</td><td align=center valign=top> <!-- Roles & Privileges List -->

    <div id='roles' style="border: 1px solid black; background-color: #ddd;">
    <% if @employee.blank? %>
        <h4>Select employee to see access details.</h4>
    <% elsif @show_uploads %>
        <%= render :partial => 'employee_uploads' %>
    <% else %>
        <%= render :partial => 'employee_edit' %>
    <% end %>
    </div>

</td></tr>

然后,在acl / _employee_list.html.erb:

<span class="simple">
<table class="production_list">

<tr>
    <th colspan=10>
    Employees &nbsp 
    <% if @show_all %>
        <%= link_to 'Show only active', {:action => "main"} %>
    <% else %>
        <%= link_to 'Show inactive', {:action => "main", :show_all => 1} %>
    <% end %>
    &nbsp 
    <%= link_to_remote  'Create',
                { :url => {:action => "create_employee"}, :update => 'roles' } %>

    </th>
</tr>
<tr class="default_header_row">
    <th width=50 class="default_header_cell small_08">Initials</th>
    <th width=190 class="default_header_cell small_08">Name</th>
    <th width=90 class="default_header_cell small_08">Access</th>
</tr>

<%= render(:partial => "employee_item", :collection => @employees) %>

</table> 
</span>

acl / _employee_create.html.erb只是一个很长的输入表,显然会被插入到页面上的#post div中。

所以,我的问题是 - 如何在rails 3.2中使用UJS运行?

我的gemfile中有默认的jquery-rails,但我似乎无法找到处理ajax调用的位置,说实话,我不确定我应该怎么解决这个问题。 (特别是以更一般的方式)。应用程序遍布这个行为,所以我需要提出某种模仿前一种类型的解决方案。

2 个答案:

答案 0 :(得分:0)

如果你想保留原型我建议使用原型和jquery。

确保application.js具有以下内容:

//= require prototype
//= require .....//other prototype libraries
//= require jquery
//= require jquery_ujs
//= ......//Ohter libraries


//Then add this to avoid any conflicts
jQuery.noConflict();
$j = jQuery;

如果您想使用jquery和$ for prototype

,可以使用$ j

现在,如果您只是覆盖应用程序助手中的link_to_remote方法,那么它会呈现类似

的内容
link_to "TEXT",  URL, :remote=> true, options

Use a js.erb file instead of render :text=>'blah blah'

多数,我想

以下内容详细介绍: more details

答案 1 :(得分:0)

/acl/main.html.erb中的

:(假设您的路由文件有employees_path)

<%= link_to employees_path, remote:true %>

/acl/employees/index.js.erb中的

<%= for employee in @employees %>
  $('table tbody').append(<%= j raw render('employee', employee:employee))
<% end %>