2009-08-17 19 views
1

In Ruby on Rails arbeite ich mit einem Inline-RJS und versuche herauszufinden, welche Auswahloption ausgewählt wurde, indem ich auf die selectedIndex-Eigenschaft zugreife. Aus irgendeinem Grund nicht in der Lage, dies zur Arbeit zu bringen.Zugriff auf Werte von Elementen in RJS

So zum Beispiel die Zuordnung/Änderung der Eigenschaft selectedIndex funktioniert super:

page['model_author_id'].selectedIndex = 5 

Aber es liest und einen Vergleich in der RJS tun funktioniert nicht:

if page['model_author_id'].selectedIndex == 0 then xxx end 

ich eine Debug-tat in Firebug und es scheint, dass RJS den folgenden (falschen) Code generiert -

Also, die Frage ist - wie kann ich die Werte von Seitenelementen mit dem RJS bekommen?

Antwort

2

RJS ist nur ein Javascript-Generator, und das Javascript wird nicht ausgeführt, bis es Client-Seite ist. Daher können Sie den Wert der Auswahloption noch nicht in Ruby ermitteln.

Wenn Sie eine "if" -Anweisung für den ausgewählten Wert erstellen möchten, müssen Sie dies in Javascript tun.

page << "if ($('model_author_id').selectedIndex() == 0) {" 
    page["model_author_id"].selectedIndex = 5 # or whatever you want here 
page << "}" 
+0

Vielen Dank für die Antwort Ryanb, aus irgendeinem Grund konnte ich keine Antwort in den Rails-Bücher und Foren finden. Eigentlich denke ich, die Schwierigkeit für RJS-Neuling wie mich ist, dass der Unterschied sehr subtil ist - ja, RJS ist ein Javascript-Generator, aber warum kann es auch Conditionals/etc. für Sie generieren, konvertieren Ruby in JS? – Vlad

+0

Dies ist eine Einschränkung der Ruby-Sprache. Der "=" Operator ist eine Methode und das Verhalten kann überschrieben werden, aber "wenn" Verhalten nicht. Wenn Sie mit Javascript vertraut sind, empfehle ich, RJS nicht zu verwenden. Mischen Sie stattdessen einfach javascript und erb (mit einer View-Datei wie index.js.erb). – ryanb