рендерит частичное из jquery и haml

Функциональность, которую я планирую сделать, заключается в вставке некоторых элементов формы в зависимости от числа, выбранного из тега выбора.

У меня есть выбор Тэг вызван для number_of_passengers, и я планирую динамически добавлять новые поля пассажира для выбранного номера. Скажем, я выбрал 2 из number_of_passengers, тогда в наборе полей должны появиться 2 формы. эти формы содержат имя, возраст и т. д.

Я попытался сделать следующее:

вызывать функцию rails из jquery?

и просто конвертировать ее в хамл-говорящий, но я получаю ошибки всякий раз, когда использую тег: javascript. Кроме того, я не думаю, что смогу «избежать» тега javascript, как только я нахожусь в нем

:javascript
  $('#number_of_passengers').change(function() {
    var $num_of_passengers = $(this).val();
    for($i=0; $i<$num_of_passengers;$i++) {
      $('.passenger-info ul').append('<%= escape_javascript( render :partial => "new_passenger", :locals => {:booking => @booking }) %>');
    }
  })

, так как я нахожусь в form_for, как я могу передать переменную @booking в локальную переменную? Это кажется действительно сложным, и я планирую сделать «грязный» выход - просто зацикливаться 20 раз (максимум 20 пассажиров), а затем просто скрывать / показывать их в зависимости от выбранного числа. Но вы думаете, что это слишком грязно?

6
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

Синтаксис Rails все время меняется, но не должно быть

render :partial => "new_passenger", :locals {:booking => @booking })

render :partial => "new_passenger", :locals => {:booking => @booking })

Вы можете избежать javascript внутри блока javascript, потому что вы оцениваете теги ruby.

Какие сообщения об ошибках вы получаете?

Мне непонятна последняя часть вашего вопроса, но это то, что вы ищете:

- form_for @user do |f|
  # f.object is equal to @user
0
ответ дан 8 December 2019 в 15:58
поделиться

Чтобы интерполяция работала, вам нужно сделать что-то вроде

!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');

, проще говоря: добавить ! = до начала строки и включить строку в двойные кавычки.

Ваш вопрос о @booking : Я предлагаю вам изучить некоторые примеры вложенных форм, чтобы вам было понятнее (например, this и this railscast).

12
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: