2013-08-02 2 views
0

Оглядываясь (много) Я прорыл множество сообщений по этому вопросу, но я действительно смущен, так как эта проблема, похоже, в основном была рассмотрена некоторое время назад (когда произошли изменения) и редко совпадает с тем, как сегодня выглядят вещи.Rails/ненавязчивый Javascript - link_to_remote: update

Итак, я пытаюсь обновить приложение 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> 

А потом, в аКЛ/_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 на этой странице.

Итак, мой вопрос - Как мне это сделать с UJS в рельсах 3.2?

У меня есть jquery-rails по умолчанию в моем gemfile, но я не могу понять, где обращаться с вызовом ajax, и, честно говоря, я не уверен, как я должен исправить это (особенно в более общем виде). Приложение работает по этому поведению повсюду, поэтому мне нужно придумать какое-то решение, которое имитирует предыдущее.

ответ

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; 

Вы можете использовать $ J, когда вы хотите сделать что-то с JQuery и $ за прототип

Теперь, если вы просто переопределить метод link_to_remote в ваш помощник приложения так, что он делает что-то вроде

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

И

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

Вот и все, я думаю

Следующая есть что-то в деталях: more details

+0

Да, я думаю, что я бы предпочел, чтобы переворачивать от прототипа, и переместите все это в jQuery. Итак, если бы я захотел сделать решение для этой конкретной страницы, куда бы отправился js? Например, я делаю тяжелый подъем в application.js как: '$ (# role) .update (response);' Или это подходит в конкретном файле? –

+0

EDIT: Хорошо, я прочитал эту страницу, поэтому я реорганизую свой вопрос: Могу ли я сделать это вообще? Например, если я не хочу делать явный '$ (# someid) .update (respones)' для каждого отдельного link_to_remote, который у меня есть, есть ли способ сделать это немного менее целенаправленным? –

+0

как я уже говорил: Используйте файл js.erb вместо рендера: text => 'blah blah' как ответ js. , например: у вас есть ссылка: <% = LINK_TO 'Последние комментарии', latest_comments_path,: Пульт дистанционного управления: истинное%> он идет к индексной действию комментариев контроллера. то для обработки ответа ajax у вас должен быть файл index.js.erb в каталоге/views/comments/с содержимым вроде: $ ('comments'). append ('render partial:' comment ', collection: @comments) и т.д. Надеюсь, что поможет – Muntasim

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 %> 

+0

Это не было частью кода, который меня интересовал, и есть разница в том, что меня интересует содержимое ajax, поэтому мне нужна привязка. Ресурс в ответе, несмотря на то, что он предназначался для какой-то прототипа/гибридной установки jQuery, на самом деле заканчивался тем, что фиксировал вещи, поэтому я принимаю это :) Спасибо в любом случае –

Смежные вопросы