Есть ли у link_to: before и / или: after как link_to_remote - PullRequest
1 голос
/ 09 июня 2009

Я конвертирую некоторые из моих link_to_remote генераторов в link_to, так как вызовы AJAX создавали проблемы с кнопкой возврата моего браузера. (Глупые ошибки нуба!)

В моем приложении много страниц с длительным циклом ожидания (по разным причинам вне моего контроля). Я полагался на способность link_to_remote использовать вызовы :before и :after для отображения счетчика, пока пользователь ожидает. link_to имеет что-то подобное? Я предполагал просто бросить вызовы, как я делал с link_to_remote ... но это действительно имеет смысл только для вызова :before (и, похоже, он не работает). Какие у меня есть другие варианты на данный момент?

Ответы [ 3 ]

4 голосов
/ 09 июня 2009

link_to "Нажмите меня", your_url,: onclick => "javascript"

1 голос
/ 09 июня 2009

Поскольку link_to генерирует простой якорь, по которому пользователи могут щелкать, вероятно, лучшим вариантом будет добавить обработчики javascript для document.onunload, чтобы заменить ваши: before обработчики. Вы SOL для обработчиков: after ;-) Проверьте Prototype's Event.observe () для этого или используйте RJS для того же, с лучшей интеграцией с Rails.

0 голосов
/ 09 июня 2009

Если вы хотите немного изучить Javascript, я считаю, что делать то же самое в jQuery - быстро и легко. Похоже, вы все еще делаете AJAX-вызовы, просто у поведения link_to_remote были неблагоприятные побочные эффекты.

Если ваш код вида Rails выглядит следующим образом:

<%= link_to "Show me", slow_page_url, :class => 'remote', :'data-update' => 'display' %>

Мне нравится добавлять блок jQuery следующим образом:

<% content_for :dom_ready do %>
  // register a callback for the click event on links with class 'remote'

  $('a.remote').click( function() {

    // this is the clicked_link, which you may want to 
    // persist thru several levels of callbacks
    // so assign it to a local variable

    var clicked_link = this;

    // assuming you already have a start_spinner function, 
    // and you might pass it the object where the click occured

    start_spinner(clicked_link);

    // here's the ajax call, which will automatically update 
    // the div you identified using the data-update attribute 
    // with the returned html

    $('#'+$(this).attr('data-update')).load( $(this).attr('href'), {}, function() {

       //this callback only runs when the AJAX request has completed

      stop_spinner( clicked_link );

    } );

    // prevents the click event from propagating to the window object 
    //and moving the user away from the current page

    return false;
  } );
<% end %>

Тогда у меня есть вся моя загрузка javascript внизу моего макета, вот так

<%= javascript_include_tag 'jquery-1.3.2.js' %>
<script type="text/javascript">
$( function() {
  <%= yield :dom_ready %>
);
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...