2017-05-18 2 views
0

Ich versuche nur Rails Helfer aus meinem coffeescript zu rufen.Coffesscript Variablen in Ruby Codestücken

Das Problem ist, dass Kaffee Variablen in Ruby-Codestücken, die in <%= ... %> Blöcke sind nicht verfügbar sind. Und wenn sie mit #{} verarbeitet werden, übersetzt es in JS falsch. Also, lass mich das illustrieren. Dies ist ein Stück .js.coffee.erb Datei:

<% environment.context_class.instance_eval { include InputsHelper } %> 
$('#input_input_type').change -> 
    t = $('#input_input_type').val() 
    $('.input_address .help-block').html('<%= input_type_hint(t) %>') 

Dieser Code erzeugt ein solcher Fehler: undefined local variable or method 't' for #<#<Class:0x007f5e75ebd860>:0x007f5e785d1410>

Ok, lassen wir 't' in #{}:

<% environment.context_class.instance_eval { include InputsHelper } %> 
$('#input_input_type').change -> 
    t = $('#input_input_type').val() 
    $('.input_address .help-block').html("<%= input_type_hint(#{t}) %>") 

Dies in einer falschen JS übersetzt Weg. Die letzte Saite sieht wie folgt aus: $('.input_address .help-block').html("<%= input_type_hint(" + t + ") %>"); Zitate gebrochen werden, so dass es bewirkt, dass Schienen mit dem Fehler fallen:

syntax error, unexpected ';', expecting ')' ; _erbout.force_encoding(__ENCODING__)^

Auf diese Weise weiß ich nicht, wie dies zu bewerkstelligen. Gibt es einen Weg, es zu tun?

+2

Das Problem scheint zu sein, dass Sie versuchen, eine serverseitige Methode von der Clientseite auszuführen – user000001

Antwort

1

Es gibt keine einfache Möglichkeit, dies zu tun.

Das Problem ist, dass das Kaffee-Skript im Browser ausgeführt wird, aber das Zeug in der <%= ... %> auf dem Server ausgeführt wird, während der Server das coffeescript erstellt.

Also wenn Sie sagen, input_type_hint(t) läuft dies auf dem Server, aber der arme traurige Server hat keine Ahnung, was "t" ist.

Um dies zu erreichen, werden Sie die gesamte input_type_hint Methode in coffeescript umcodieren, so dass es auch im Browser laufen kann! (Und dann wird es nicht in dem <%= => Dingen.

Durch die Art und Weisen Sie http://ruby-hyperloop.io möchten vielleicht als anstelle Coffee Sie verwenden überprüfen, schreiben Sie einfach überall Ruby und Sie dieses ungeschickte ERB Geschäft im Grunde nicht brauchen.