Использование $ (this) в файле .js.erb - Ruby on Rails AJAX - PullRequest
3 голосов
/ 23 февраля 2011

Я использую Rails3 с jQuery и пытаюсь делать простые вызовы ajax. У меня есть ссылка, которая отображает текущий статус (онлайн / оффлайн) приложения. При нажатии он обновит статус.

link_to app.status, { :controller => :apps, :action => :live_status, :id => app }, {:remote => true, :class => "#{app.status} status"}

live_status.js.erb:

$(this).fadeOut();
$(this).parent().html("<%= escape_javascript(status_link(@wowza_app)) %>");
$(this).fadeIn();

status_link вернет обновленную ссылку_в

Однако $ (это) не работает так, как я себе представляю. Как я могу обновить статус клика с новым статусом?

Ответы [ 2 ]

8 голосов
/ 23 февраля 2011

Вы должны дать элемент, который вы хотите обновить ID (я добавил элемент в хеш в самом конце):

link_to app.status, { :controller => :apps, :action => :live_status, :id => app }, {:remote => true, :class => "#{app.status} status", :id => app.id}

Теперь вы можете использовать тот же идентификатор, чтобы выбрать правильный элементс jQuery:

$("#<%= @wowza_app.id %>").fadeOut();
$("#<%= @wowza_app.id %>").parent().html("<%= escape_javascript(status_link(@wowza_app)) %>");
$("#<%= @wowza_app.id %>").fadeIn();

Конечно, это предполагает, что @wowza_app имеет метод с именем id, который возвращает тот же идентификатор ссылки, но вы можете изменить переменные по мере необходимости, чтобы выбрать элемент справильный ID.

3 голосов
/ 23 февраля 2011

вы должны использовать селектор.Когда этот код интерпретируется в ответе ajax, jQuery не знает, на что вы ссылаетесь.Лучше использовать что-то вроде:

$('#my-special-div').fadeOut();
$('#my-special-div').parent().html("<%= escape_javascript(status_link(@wowza_app)) %>");
$('#my-special-div').fadeIn();
$('#my-special-div').hide(2000, function () {
    $(this).remove();  // here jQuery knows you are talking about 'my-special-div'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...