Ответ 1
На самом деле это довольно просто, это просто кажется большим делом, потому что оно новое. В принципе, с новой ненавязчивой поддержкой javascript рельсы ujs script предоставляют множество событий, к которым вы можете привязать функции javascript, это:
- ajax: beforeSend - уволен до отправки
- ajax: успех - срабатывает после отправки, содержит ответ
- ajax: завершено - запущено после события успеха
- ajax: ошибка при запуске ошибок
все, что вам нужно сделать, это написать функцию (которую вы переносите в $document.ready), которая по очереди связывает некоторые анонимные функции с каждым из этих событий или просто интересующие вас события.
Например, предположим, что у вас есть div, в который вы хотите поместить данные ответа с идентификатором "response_data", и у вас есть ссылка с идентификатором "ajax_trigger". Что-то вроде этого:
<%= link_to "My Link", some_model_path(@model_instance),
:remote => true, :html => {:id => "ajax_trigger"} %>
<div id="response_data">
</div>
Все, что вам нужно сделать, это предоставить функцию, подобную приведенной ниже, чтобы поместить ответ с сервера в div:
$(document).ready(
function(){
$("a#ajax_trigger").bind("ajax:success",
function(evt, data, status, xhr){
//this assumes the action returns an HTML snippet
$("div#response_data").html(data);
}).bind("ajax:error", function(evt, data, status, xhr){
//do something with the error here
$("div#errors p").text(data);
});
});
Действительно, все, что вы делаете с javascript, обрабатывает ответ, когда он возвращается с сервера. Вам действительно не нужно ничего делать, чтобы инициировать запрос XHR, и вы также можете безопасно хранить этот метод в файле .js, который обрабатывается как статический актив. Если вы используете Rails 3.1, вы должны поместить его в файл с соответствующим именем javascript, который соответствует контроллеру. В вашем контроллере вам нужно убедиться, что вы указываете: layout = > false в методе responses_with(), таким образом, контроллер просто возвращает частичный или шаблон, который он отображает, а не полную страницу. Эта настройка также работает с действиями, которые возвращают javascript для выполнения клиентом, а также JSON, в зависимости от того, какой тип данных вы указываете в запросе.
Я нашел этот пост в блоге весьма полезным: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/