事件触发后使用ruby变量

时间:2016-03-21 15:28:01

标签: javascript ruby-on-rails erb

我将此脚本放在底部的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而不解释它?

1 个答案:

答案 0 :(得分:0)

  

更一般地说,如何在我的javascript中加载页面后使用erb   没有被解释?

你做不到。 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 + "')");
        }
})