在事件触发后使用 ruby 变量
Use ruby variable after event trigger
我在 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 而不被解释?
More generally, how can I use erb after page load in my javascript
without it being interpreted ?
你不能那样做。 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 + "')");
}
})
我在 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 而不被解释?
More generally, how can I use erb after page load in my javascript without it being interpreted ?
你不能那样做。 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 + "')");
}
})