在事件触发后使用 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 + "')");
        }
})