2016-10-26 1 views
0

Ich möchte einige js Inline-Skripte, die ich auf meiner Homepage habe, in eine Javascript-Datei (in Assets) umwandeln, aber es gibt eine gewisse Komplexität aufgrund von Variablen.Rails 4 - js Inline-Skript in die JS-Datei verschieben

home.html.erb

<div> 
this is the homepage 
</div> 
<script> 
    <% @deal.deal_details.each_with_index do |popin, index| %> 
    <% index_plus_one = index + 1 %> 
    function loadInfoPopin() { 
     var msg; 
     msg = Messenger().post({ 
     message: '<%= j render partial: "deals/info_popin/info_popin#{ popin['popin_id'] }", 
        locals: { popin: popin, index: index_plus_one } %>' 
     }); 
    } 
    <% end %> 
</script> 

Aus Gründen der Informationen hier ist das Format der Spalte Deal/Attribut 'deal_details' (es ist ein JSON-Attribut):

[{"popin_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs"},{"popin_id":"5","text1":"sqqs","video1":"s"}] 

Dies ist ein Beispiel und Sie können so viele JSON-Blöcke innerhalb des Arrays haben wie möglich.

Angebote/info_popin/info_popin5.html.erb (es ist ein Beispiel)

<div> 
     <p><a href="<%= popin['image1'] %>">cool image</a></p> 
    </div> 
</div> 

Nun, wie kann ich bewegen die ganze Skript oder zumindest die Funktion loadInfoPopin(), um eine JavaScript-Datei (das ist weg von der Ansicht home.html.erb) zu sagen?

Dank

Antwort

1

Wie wäre es, die loadInfoPopin()-Funktion in eine separate JS-Datei zu verschieben und die Funktion leicht zu ändern, um ein Argument für die HTML-Nachricht aufzunehmen?

function loadInfoPopin(html_message) { 
    Messenger().post({ 
    message: html_message 
    }); 

Setup-HTML für die Nachricht in der Schleife, bevor er in Weitergabe und loadInfoPopin aufruft.

+0

werde es versuchen, danke. – Mathieu

0

.js.erb ist eine Option. Auf diese Weise werden die js-Dateien vor dem Kompilieren analysiert. Nicht sicher, obwohl es so funktioniert, wie Sie es möchten.

Ich würde empfehlen, die Variablen im Layout als vars zu belassen und nur die statischen JS-Teile zu den Assets zu verschieben.

+0

Ich habe versucht, mit Gon-Gem und eine .js.erb-Datei verwenden, aber es funktioniert nicht. Ich brauche einen präziseren Code-Vorschlag. – Mathieu