2016-03-21 10 views
0

私は、スクリプトタグで、一番下に、new.html.erbファイルでこのスクリプトを持っていますので、私は持っている使用ルビー変数

$('div #mainPhotoDropzone').dropzone({ 
     url: "/photos?post_id=" + $("#post_form").data('post-id'), 
     complete: function(file){ 
      var url = "<%= @post.photos.first.file.path %>"; 
      $.get(url, function(data){ 
      $('#mainPhotoDropzone').attr('style', "background-image: url('" + data.main_photo + "')"); 
      }) 
     } 

しかし、@post.photos.first.file.pathはまだページロード上に存在しません。エラー。 completeイベントでこの変数を呼び出しているので(この特定の時刻に存在します)、このスクリプトを別のファイルに配置して、この作業を行うにはnew.html.erbに入力する必要がありますか? js.erbファイルに配置する必要がありますか?

さらに一般的には、JavaScriptがページロード後にerbを解釈することなく、どうすれば使用できますか?

+0

JavaScriptはクライアント上で実行されていますが、ルビーはサーバー上で評価されます。クライアント側のイベントが発生したときにサーバーに関連する操作を行う場合は、サーバー(ajax)に対してHTTPリクエストを発行する必要があります。 – Pointy

+0

あなたの答えは@Pointyありがとう。私はすでにAJAXリクエストを行っています。つまり、dropzoneはAjax経由でサーバーに画像を送信し、この画像をdropzoneの完全なイベントで使用したいと考えています。ルビーはページの読み込み時に評価されるので、このerbの部分を含むファイルをどのように持つことができ、完全なイベントが発生したときに評価されますか? –

+0

あなたのサーバー側コードは、何とか応答の一部としてそのURLを返送する必要があります。 ( "complete"ハンドラの 'file'パラメータ)Ajaxアクションは何を返しますか? – Pointy

答えて

0

さらに一般的には、JavaScriptがページロード後にどのように使用されますか? 解釈されません。

これはできません。 Javascriptはクライアント側、Rubyはサーバー側です。両方を同時に処理したい場合は、ActionCableまたはVoltフレームワークを考慮することができます。しかし、あなたのユースケースにはあまり適していません。

@Pointyがコメントに指摘したように、サーバーからurlを取得したいとします。実際にはあなたはそれを必要としないだけで、すべての人のために一度だけ仕事をします。例:

$('div #mainPhotoDropzone').dropzone({ 
     url: "/photos?post_id=" + $("#post_form").data('post-id'), 
     complete: function(data){ 
      $('#mainPhotoDropzone').attr('style', "background-image: url('" + data.main_photo + "')"); 
     } 
}) 
関連する問題