2014-12-06 2 views
0

У меня есть система флеш-карт, которая позволяет пользователям создавать и проходить набор карточек. Я в настоящее время реорганизую его, чтобы сделать его более эффективным, но я столкнулся с аналогичной проблемой, с которой я был раньше. Предоставление кнопок через Javscript заставляет кнопки больше не нажимать, если Javascript не перезагружен. Вместо того, чтобы иметь 500 страниц Javascript, работающих в фоновом режиме, я изменил его, поэтому мне он больше не нужен. Однако мои пути передают параметры текущей карты контроллеру. Однако, поскольку я больше не создаю кнопки через JS, кнопки передают параметр в качестве исходной карты при загрузке страницы.Использование Javascript для изменения параметров, переданных в пути rails

<%= link_to ">", flashcard_path(type: "next", old: @card.id, status: @is_read), remote: true, class: "btn" %> 

Как я могу обновить @ card.id без повторного рендеринга кнопку целиком? Я открыт для предложений, если мне тоже нужно сменить кучу вещей. Я уверен, что я делаю это странным образом, так я так и делаю. :)

Это javascript, который повторно отображает флэш-карту и метод сопровождающего контроллера.

$('#id_number').html("<%= @card_num %>"); 
$('#flashcard-title').html("<%= escape_javascript(@card.title) %>"); 
$('#flashcard-lines').html("<%= escape_javascript(render partial: 'flashcard_lines', :locals => { card: @card, is_read: @read }) %>"); 
$('#flashcard-body').html("<%= escape_javascript(@card.body) %>"); 
def flashcard 
    all = FlashCard.all 
    old_flashcard = FlashCard.find(params[:old].to_i) 
    old_index = FlashCard.all.index(old_flashcard) 
    case params[:type] 
    when "new" 
     @card = FlashCard.new 
     @card.save 
     @read = false 
    when "edit" 
     @card = old_flashcard 
     @read = false 
    when "next" 
     if old_index == all.length - 1 
     back = 0 
     else 
     back = old_index + 1 
     end 
     binding.pry 
     @card = all[back] 
     @read = true 
    when "back" 
     if old_index == 0 
     back = all.length - 1 
     else 
     back = old_index - 1 
     end 
     @card = all[back] 
     @read = true 
    when "save" 
     old_flashcard.save 
     @card = old_flashcard 
     @read = true 
    when "delete" 
     old_flashcard.destroy 
     @card = FlashCard.all.last 
    else 
     @card = FlashCard.find(0) 
     @read = true 
    end 
    if params[:status] 
     @read = params[:status] 
    end 
    @card_num = FlashCard.all.index(@card) + 1 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
+0

Можете ли вы разместить свой javascript? –

+0

Не так много Javascript с тех пор, как я взял большинство из них, но я отредактирую сообщение с Javascript, который запускается как ответ от контроллера. – Rockster160

ответ

1

Я не уверен, если я понять вашу проблему правильно, но, может быть, вы могли бы сделать что-то вроде этого?

$('#current_btn_id').attr('old',new_id); 
+0

Я не думаю, что это сработает - я не пытаюсь изменить HTML. Я пытаюсь обновить путь link_to. link_to url - flash_card_path (old: @card). Мне нужно, чтобы это был тот же путь, но мне нужно обновить @card, чтобы быть другим значением. Селектор attr() не изменяет ванну, образованную рельсами, не так ли? – Rockster160

+0

О, я вижу! Извините, не заметил, что это было внутри помощника пути. Можете ли вы сделать это так, чтобы вы просто составляли ссылку без помощника и меняли с помощью javascript? ех. flashcards/next/<% = oldcard.id%> и заменить его новым? – qubit

+0

Я думал об этом так. Я на самом деле изначально написал его через html, а затем сделал все это динамическим, превратив его в erb. Я попробую это, добавив идентификатор к маршруту, а затем используя js, чтобы вручную изменить href. Спасибо за идею! – Rockster160

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