onchange remote_function в rails 3 - это действительно?как я могу сделать это ненавязчиво? - PullRequest
5 голосов
/ 19 января 2011

У меня два вопроса.

У меня есть тег select в приложении rails 3, который выглядит следующим образом:

 <%= select(@adverse_event_template_settings, 
    "display_arms", 
    options_for_select([["Yes", true], ["No", false]]), 
    { :selected => :display_arms },  
    :onchange => remote_function(:update => "display_arms", 
          :method => "put", 
          :with => "'display_arms=' + value", 
          :url => { :controller => :adverse_event_template_settings, 
               :action => :update, :id => @aets.id})) %>

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

Даже если это работает, я хочу знать 1) Это действительно в рельсах 3? Я знаю, что это навязчивый javascript, но удаленная функция, работающая в rails 3, кажется мне странной - что-то здесь не так?

и если вышеупомянутое НЕ является действительным, я действительно очень хотел бы знать 2) как я могу незаметно выполнить то же самое действие (то есть вызвать то же самое действие в том же контроллере)? Есть ли способ сделать это просто и чисто в рельсах 3? Я отчаянно нуждаюсь в помощи кодирования с этой частью.

Спасибо большое! Дайте мне знать, если вам нужно больше деталей.

1 Ответ

7 голосов
/ 20 января 2011

(я предполагаю, что вы используете jQuery).

Я бы поместил часть javascript в файл .js и управлял событием onchange с помощью jQuery.file:

  $(document).ready(function() {

    $('#display_arms').change(function(){
      $.ajax({url: 'YOUR URL',
        data: 'display_arms=' + value,
        success: function(data){
          $('#display_arms').html(data);
          }
      })
    });
  });

(у меня не было времени проверить это, но вы поняли идею)

Если честно, я не уверен, что есть способ сделать этот видвещь ненавязчивая (или мне интересно!).

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