2016-10-26 15 views
0

私は私のホームページにJavaScriptファイル(Assets内)を持っているjsインラインスクリプトを移動したいが、変数のために複雑さがある。ここでの情報の便宜上home.html.erbRails 4 - jsインラインスクリプトをJSファイルに移動

<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> 

はディールの列/属性 'deal_details' の形式である(これは、JSONの属性があります):

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

これは一例であり、可能な限り多くのjsonブロックを配列内に持つことができます。

取引/ info_popin/info_popin5.html.erb(それは一例です)今

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

、どのように私は(全体のスクリプトまたは少なくとも機能loadInfoPopinを移動することができます)のJavaScriptファイルへの(つまりビューhome.html.erbから離れて言うことですか?)

ありがとうございました

答えて

1

loadInfoPopin()関数を別のJSファイルに移動し、関数を少し変更してhtmlメッセージの引数を取るのはどうですか?

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

セットアップ中に入るとloadInfoPopinを呼び出す前に、ループ内のメッセージのHTML。

+0

おかげさまでそれを試してみます。 – Mathieu

0

.js.erbはオプションです。こうすることで、コンパイルする前にjsファイルが解析されます。それはあなたが望むように動作しますがわかりません。

レイアウト内の変数を変数として残し、静的JSパーツだけをアセットに移動することをお勧めします。

+0

gon gemで試してみましたが、.js.erbファイルを使ってみましたが動作しません。私はより正確なコードの提案が必要です。 – Mathieu

関連する問題