0

环顾四周(很多)之后,我浏览了很多关于这个主题的帖子,但我真的很困惑,因为这个问题似乎主要是在一段时间前(发生变化时)解决的,并且很少与今天的情况相匹配.

所以,我正在尝试将 Rails 2.1 应用程序更新到 3.2 - 并遇到了已弃用的 link_to_remote 函数。我意识到它已被 link_to :remote => true 取代,但这并不能真正解决我的问题。

我正在开发的应用程序使用了很多原型魔法来进行页面内渲染,如下所示:

在 /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 调用的位置,老实说,我不确定我应该如何解决这个问题(尤其是在更通用的方法)。应用程序到处都是这种行为,所以我需要想出一些模仿以前的解决方案 - 有点。

4

2 回答 2

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 和 $ 做原型时,你可以使用 $j

现在,如果您只是在应用程序帮助程序中覆盖 link_to_remote 方法,以便它呈现类似

link_to "TEXT",  URL, :remote=> true, options

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

就是这样,我猜

以下有一些细节: 更多细节

于 2013-08-02T11:00:09.427 回答
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 %>

于 2013-08-02T13:56:44.873 回答