0

On Click Я вызываю javascript, где я зафиксировал значение переключателя в переменной в javascript. Затем я вызываю частичную передачу, передавая эту переменную-переключатель как локальную.
Я получаю ошибку: неопределенная локальная переменная или метод `radio_button_value 'для # < #.Javascript встроенный рубиновый рендеринг частичного локального вызова, как передать значение переменной

Вот мой Javascript код:

<script> 
function render_dir_partial() { 
    alert('in javascript.'); 
    alert("you chose the option: " + $('form input[type=radio]:checked').val()); 
    radio_button_value = $('form input[type=radio]:checked').val(); 
    alert ("radio_button_value: " + radio_button_value); 
    $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>  radio_button_value } %>') 
} 
</script> 

Когда я запускаю приложение, это aleart показывает правильное значение, присвоенное на основе радио-кнопки нажал: оповещения («radio_button_value:» + radio_button_value);

Если мне сложно записать значение в код, вместо переменной все будет работать нормально. Не могли бы вы помочь мне определить правильный синтаксис для передачи значения radio_button_value в dir_choice?

Я сделал много исследований и все показывает, как читать значение, когда переменная поступает из определенного объекта модели.

Вот стробированная строка, которая работает.

<script> 
function render_dir_partial() { 
    alert('in javascript.'); 
    alert("you chose the option: " + $('form input[type=radio]:checked').val()); 
    radio_button_value = $('form input[type=radio]:checked').val(); 
    alert ("radio_button_value: " + radio_button_value); 
    $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice => "watchfolder" } %>') 
} 
</script> 
+0

JavaScript работает на клиенте, Ruby запускается на сервере. – Pointy

ответ

0

ruby_button_value его переменной JS, Ruby никогда не поймет, потому что это технически не существует даже при рубиновый окончании загрузки (Ruby работает на сервере, JS на стороне клиента).

Что вы сделали бы, чтобы передать ruby_button_value через AJAX на ваш контроллер и затем извлечь значение переменной на основе этого.

0

Это не будет работать так, как вы этого хотите.

По запросу Ruby запускается на сервере и генерирует код HTML и JS. Эта разметка HTML отправляется клиенту, где он отображается браузером. Теперь проблема в том, что ваш браузер не понимает Ruby, просто HTML и JS. Поэтому он будет обрабатывать ваш скрипт Ruby как строку (из-за qoutes) и просто печатать ее в своем div.

Путь к отправке запроса AJAX на ваш сервер (который понимает Ruby) и заставить его возвращать HTML/JS, что бы браузер понял.

Возможно, вам захочется изучить их.

richonrails.com/articles/basic-ajax-in-ruby-on-rails

www.tutorialspoint.com/ruby-on-rails/rails-and-ajax.htm

1

Предположительно, следующий код в некотором html.erb файле:

<script> 
function render_dir_partial() { 
    alert('in javascript.'); 
    alert("you chose the option: " + $('form input[type=radio]:checked').val()); 
    radio_button_value = $('form input[type=radio]:checked').val(); 
    alert ("radio_button_value: " + radio_button_value); 
    $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>  radio_button_value } %>') 
} 
</script> 

Когда браузер запрашивает файл html.erb, содержащий этот код, здесь шаги, которые происходят:

  1. Rails выполняет код erb i n этот файл, преобразовывая файл только в html и javascript.
  2. Сервер отправляет преобразованный файл в ваш браузер.
  3. Ваш браузер выполняет javascript в соответствующее время.

radio_button_value переменная не создается до шага # 3, то есть, когда функция JS render_dir_partial() выполняет, который может быть в течение 10 лет. Однако в шаге # 1 рельсы должны назначить локальной переменной dir_choice значение переменной radio_button_value - прямо сейчас!

Но даже если ваш JS скрипт выглядит следующим образом:

<script> 
    var radio_button_value = "hello"; 

    $('#dir_list').html('<%=j render :partial => "dir_list", :locals => { :dir_choice =>  radio_button_value } %>') 
} 
</script> 

... вы все еще получаю ту же ошибку, потому что:

  1. radio_button_value переменная JS до сих пор не существует до тех пор, браузер получает файл, но рельсы должны назначить значение переменной radio_button_value переменной dir_choice, прежде чем сервер отправит страницу в браузер.

  2. И вот настоящая проблема: Ruby-код не может даже ссылаться на переменные в js-коде и наоборот. Если ваш код ruby ​​упоминает переменную radio_button_value, тогда она должна быть определена в рубиновом коде, когда выполняется код ruby. Ruby-код не знает, что JavaScript уже изобрел. И если вы укажете переменную с именем radio_button_value в js-коде, она должна быть определена в js-коде при выполнении js-кода.

0

Я пытался сделать то же самое, но вы не можете делать то, что вы пытаетесь сделать.

Ruby проверит строку '<%=j render :partial => "dir_list", :locals => { :dir_choice => radio_button_value } %>' и отправит уведомление, потому что radio_button_value не определен в Ruby. Если вы должны были вставить здесь переменную javascript, Ruby даст ту же ошибку, потому что переменная javascript также не будет определена в Ruby. Все это происходит во время выполнения сервера, прежде чем код даже попадет в браузер, где выполняется javascript.

Таким образом, у нас есть два варианта:

  1. Execute всю логику на стороне сервера. Выпадающее меню отправит форму, которая передаст переменную в параметрах url.

  2. Ajax. Javascript сделает HTTP-запрос на сервер и предоставит результаты. посетите www.tutorialspoint.com/ruby-on-rails/rails-and-ajax.htm

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

  • Нет связанных вопросов^_^