2011-01-19 6 views
5

Mam dwa pytania.onchange remote_function w szynach 3 - czy jest ważny? jak mogę to wykonać dyskretnie?

Mam wybierz tag w ciągu 3 szyn aplikacji, która wygląda tak:

<%= 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})) %> 

to robi to, co ja chcę, żeby DO- czyli wywołać działanie kontrolera kiedy wybierz wartość zmienia box.

Mimo że to działa, chcę wiedzieć 1) Czy jest to ważne w szynach 3? Wiem, że to natrętne javascript, ale zdalna funkcja działająca w szynach 3 wydaje mi się dziwna - czy coś tu nie gra?

i jeśli powyższe NIE jest ważne, naprawdę bardzo chciałbym wiedzieć 2) w jaki sposób mogę wykonać tę samą akcję (to znaczy wywołać tę samą akcję w tym samym kontrolerze) dyskretnie? Czy istnieje sposób, aby to zrobić po prostu i czysto w szynach 3? Rozpaczliwie potrzebuję pomocy przy kodowaniu tej części.

Dziękuję bardzo! Daj mi znać, jeśli potrzebujesz więcej informacji.

Odpowiedz

7

(Zakładam, że korzystasz z jQuery).

Umieściłbym część javascript w pliku .js i zarządzałam wydarzeniem onchange z jQuery.

<%= select(@adverse_event_template_settings, 
    "display_arms", 
    options_for_select([["Yes", true], ["No", false]]), 
    { :selected => :display_arms }) %> 

iw pliku JS:

$(document).ready(function() { 

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

(nie miałem czasu, aby przetestować ten, ale masz pomysł)

Szczerze mówiąc, nie jestem pewien, że istnieje sposób na zrobienie tego rodzaju rzeczy dyskretnie (lub jestem zainteresowany!).

+1

To * jest * sposobem, aby to zrobić dyskretnie. – Confusion

Powiązane problemy