私は、スクリプトタグで、一番下に、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を解釈することなく、どうすれば使用できますか?
JavaScriptはクライアント上で実行されていますが、ルビーはサーバー上で評価されます。クライアント側のイベントが発生したときにサーバーに関連する操作を行う場合は、サーバー(ajax)に対してHTTPリクエストを発行する必要があります。 – Pointy
あなたの答えは@Pointyありがとう。私はすでにAJAXリクエストを行っています。つまり、dropzoneはAjax経由でサーバーに画像を送信し、この画像をdropzoneの完全なイベントで使用したいと考えています。ルビーはページの読み込み時に評価されるので、このerbの部分を含むファイルをどのように持つことができ、完全なイベントが発生したときに評価されますか? –
あなたのサーバー側コードは、何とか応答の一部としてそのURLを返送する必要があります。 ( "complete"ハンドラの 'file'パラメータ)Ajaxアクションは何を返しますか? – Pointy