Javascript Railscast#383通过AJAX添加/删除上传器表单和脚本

Javascript Railscast#383通过AJAX添加/删除上传器表单和脚本,javascript,jquery,ruby-on-rails,ajax,railscasts,Javascript,Jquery,Ruby On Rails,Ajax,Railscasts,我已经在Railscast#383上安装了上传器,但是有没有办法通过ajax添加和删除上传器链接 我还需要传入“服务”实例id 我想通过ajax添加或删除的代码如下: <%= s3_uploader_form post: images_url(:service_id => service.id), as: "image[url]" do %> <%= file_field_tag :file, multiple: true %> <% end %>

我已经在Railscast#383上安装了上传器,但是有没有办法通过ajax添加和删除上传器链接

我还需要传入“服务”实例id

我想通过ajax添加或删除的代码如下:

<%= s3_uploader_form post: images_url(:service_id => service.id), as: "image[url]" do %>
  <%= file_field_tag :file, multiple: true %>
 <% end %>

 <script id="template-upload" type="text/x-tmpl">
   <div class="upload">
     {%=o.name%}
     <div class="progress"><div class="bar" style="width: 0%"></div></div>
   </div>
  </script>
service.id),如:“image[url]”do%>
{%=o.name%}

好的,我想出来了。我遇到的主要问题是,在通过ajax添加表单之后,uploader coffeescript没有再次执行。修订版的#136 railscast使用了基本的ajax表单,但为了通过ajax使用uploader表单,我在新的.js.erb文件中加入了uploader coffeescript作为普通javascript。这样,当执行新的.js.erb文件时,它将加载表单并执行上传程序javascript

new.js.erb:

$('#new_link').hide().after('<%= j render("images/form") %>');

jQuery(function() {
  return $('#fileupload').fileupload({
    add: function(e, data) {
      var file, types;
      types = /(\.|\/)(gif|jpe?g|png)$/i;
      file = data.files[0];
      if (types.test(file.type) || types.test(file.name)) {
        data.context = $(tmpl("template-upload", file));
        $('#fileupload').append(data.context);
        data.form.find('#content-type').val(file.type);
        return data.submit();
      } else {
        return alert("" + file.name + " is not a gif, jpeg, or png image file");
      }
    },
    progress: function(e, data) {
      var progress;
      if (data.context) {
        progress = parseInt(data.loaded / data.total * 100, 10);
        return data.context.find('.bar').css('width', progress + '%');
      }
    },
    done: function(e, data) {
      var content, domain, file, path, to;
      file = data.files[0];
      domain = $('#fileupload').attr('action');
      path = $('#fileupload input[name=key]').val().replace('${filename}', file.name);
      to = $('#fileupload').data('post');
      content = {};
      content[$('#fileupload').data('as')] = domain + path;
      $.post(to, content);
      if (data.context) {
        return data.context.remove();
      }
    },
    fail: function(e, data) {
      alert("" + data.files[0].name + " failed to upload.");
      console.log("Upload failed:");
      return console.log(data);
    }
  });
});
$('#新建链接')。在('')之后隐藏();
jQuery(函数(){
返回$('#fileupload')。fileupload({
添加:功能(e、数据){
var文件,类型;
类型=/(\.\/)(gif | jpe?g | png)$/i;
file=data.files[0];
if(types.test(file.type)| types.test(file.name)){
data.context=$(tmpl(“模板上传”,文件));
$('#fileupload').append(data.context);
data.form.find('#content-type').val(file.type);
返回数据。提交();
}否则{
返回警报(“+file.name+”不是gif、jpeg或png图像文件”);
}
},
进度:功能(e、数据){
var进展;
if(data.context){
进度=parseInt(data.loaded/data.total*100,10);
返回data.context.find('.bar').css('width',progress+'%');
}
},
完成:功能(e,数据){
var内容、域、文件、路径、到;
file=data.files[0];
domain=$('#fileupload').attr('action');
path=$('#fileupload input[name=key]').val().replace('${filename}',file.name);
to=$('#fileupload')。数据('post');
内容={};
内容[$('#fileupload')。数据('as')]=域+路径;
$.post(收件人,内容);
if(data.context){
返回data.context.remove();
}
},
失败:功能(e,数据){
警报(“+data.files[0].name+”未能上载。“);
log(“上传失败:”);
返回控制台日志(数据);
}
});
});