Ich verwende select_tag
und onchange
. Ich brauche einen Helfer-Methode aufrufen und den Wert des ausgewählten Elements als Parameter übergeben:Javascript Variable innerhalb verwenden <% %> in erb - Ruby on Rails
Dies ist, wie mein Helfer-Methode wie
def find_template(temp)
"Hello #{temp}!"
end
sieht Was muss ich tun ist, die Auswahl des Benutzers zu erhalten, unter Verwendung von Javascript, und übergeben Sie es an find_template
. Wenn ich eine Zeichenfolge anstelle von Vorlage übergeben, es funktioniert gut, also <% @header = find_template("option_1") %>
aber wenn ich var template
verwenden bekomme ich folgende Fehlermeldung:
undefined local variable or method `template' for ...
und das ist mein erb
<% content_for :javascript do %>
<script>
function template() {
var e = document.getElementById("category");
var template = e.options[e.selectedIndex].text;
<% @header = find_template(template) %>
}
</script>
<% end %>
<%= select_tag(:category, options_for_select(
Blah::TYPES.map {|k, v| [v['name'], k] }),
{onChange: 'template()'}) %>
<div id="template-overview">
<table>
<tr>
<% @header.each do |column| %>
<th class="<%= cycle('even', 'odd') -%>">
<%= column %>
</th>
<% end %>
</tr>
</table>
</div>
Sie kein Javascript innerhalb von Ruby verwenden können. Ruby ist Serverseite. Javascript ist Client-Seite. Um eine solche Variable zu übergeben, müssen Sie eine AJAX-Anfrage stellen. http://blog.teamtreehouse.com/i-dont-speak-your-language-frontend-vs-backend – Cfreak
Wenn Ihre Seite geladen wird, generiert Rails HTML, JS, CSS usw. und füttert es dann auf dem Server. Der Code ändert den Inhalt der Seite nicht, ohne die Seite neu zu laden. Wenn Sie möchten, dass sich Ihr Inhalt ändert, suchen Sie besser nach einer Möglichkeit, mit JS den Inhalt Ihrer Seite dynamisch zu ändern, ohne eine Rails-Funktion aufrufen zu müssen. – Okomikeruko
Das liegt daran, dass der Servercode vor dem Clientcode ausgeführt wird, daher ist die Variable nicht definiert. Verwende AJAX. – PHPglue