Как сделать частичку из JavaScript - PullRequest
9 голосов
/ 25 февраля 2010

У меня есть выбор, который заполняется в зависимости от выбора в другом выборе Для этого я сделал то, что рекомендовано в Railscast # 88 для «Dynamic Select Menus».

Но теперь мне нужно визуализировать частичное, передавая значение, выбранное в каждом из этих выборов. Я не могу понять, как просто инициировать вызов метода из события: onchange в select, поэтому я думаю, что мне нужно вызвать render: частичный из обработчика javascript, который обнаруживает событие selects change. Но я не могу понять, как. Я попробовал следующее в методе javascript (в файле .js.erb), но он не работает так, как хотелось бы:

function staffSelected() {
    $('date_area').show();
    <% render :partial => "calendar" -%>
}

У кого-нибудь есть хорошее решение?

Ответы [ 2 ]

8 голосов
/ 10 июня 2011

Я думаю, это то, что вы ищете. Я отрисовываю частичное в DIV с идентификатором «colors», частичное отображается только в том случае, если значение выбранного переключателя имеет красный цвет:

<script language="javascript" type="text/javascript">
jQuery(function($){
  $('#radio-buttons input[type=radio]').click(function() {
    if ($(this).attr("value") === "red") {
      $("#colors").html('#{escape_javascript(render :partial => "colors")}');
    }
  });
});
</script>
6 голосов
/ 25 февраля 2010

Вы не можете визуализировать частичное внутри JavaScript для обнаружения событий изменений. Ruby на стороне сервера, а JavaScript на стороне клиента. Ко времени запуска JavaScript ваш Ruby уже был разобран в обычный старый HTML.

Лучше всего сделать следующее:

Используйте элемент управления AJAX (есть Prototype / scriptaculous), чтобы поразить ваш сервер в событии onchange. Ваш сервер может отправить обратно RJS для обновления других раскрывающихся списков, или , он может вернуть обратно стандартный JSON, и вы можете заполнить остальные раскрывающиеся списки вручную в методе onSuccess вызова AJAX.

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