Как добавить динамический код Javascript из помощника вида в Ruby on Rails 3? - PullRequest
0 голосов
/ 13 декабря 2010

Рассмотрим следующий код из одного из файлов представления:

<table>
  <tr>
    <th><%= f.label(:shop, "Shop:") %></th>
    <td><%= select_with_new_option(f, :shop, :name, :id) %></td>
  </tr>
  ...
</table>

select_with_new_option - мой вспомогательный метод, определенный в app/helpers/application_helper.rb.Он генерирует поле выбора, содержащее все магазины в этом случае, и дополнительно опцию «Создать новый магазин».

Я хотел бы добавить код Javascript, который будет отображать:

<div>
  <label for="new_shop">New shop:</label>
  <input id="new_shop" name="new_shop" type="text" />
</div>

после выбора опции «Создать новый магазин».

Возможно ли сгенерировать этот код Javascript из select_with_new_option, или я должен сделать это другим способом?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

Так как я не вижу ваш сгенерированный код, я просто делаю это, но вам придется подстроиться под ваши нужды ... (это также предполагает, что вы используете jQuery, измените при необходимости).

Предположим, ваш вывод выглядит примерно так:

код таблицы и тому подобное

<select id="shop_select">
  <option value="new">New Shop</option>
  <!-- other options -->
</select>

где-то на странице живет твой div

<div id="new_shop_holder" style="display: none;">
  <label for="new_shop">New shop:</label>
  <input id="new_shop" name="new_shop" type="text" />
</div>

<script type="text/javascript">    
$(function(){
  var $new_shop_holder = $('#new_shop_holder');
  $('select#shop_select').change(function(e) {
    if (this.value == 'new') { $new_shop_holder.show(); }
    else { $new_shop_holder.hide(); }
  });
});
</script>
0 голосов
/ 13 декабря 2010

Вы можете попробовать

<% = select ('shop', 'name', get_shop_name, {: include_blank => "Создать"},: onchange => "show_new_form ();")%>

где show_new_form - это javascript для сокрытия и отображения вашего нового div владельца магазина, или вы можете использовать

<% = select ('shop', 'name', get_shop_name, {: include_blank => "Выберите"},: onchange => "new Ajax.Updater ('options', 'action_url', {асинхронный: true, evalScripts: true, параметры: значение}) ")%>

и действие в вашем контроллере

def action_url
render: update { | Страница | page.replace_html "new_shop_holder",: частичный => 'add_new_shop'} if value == ""
конец

Это вызовет партиал, имеющий форму для входа в новый магазин, только если выбрано создание магазина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...