Rails 3和jQuery – 如何将Ruby代码添加到元素中
我正在尝试使用jQuery,jQuery表单插件和Ruby on Rails来创建一个AJAX图像上传器。
我已完成所有图像上传和ActiveRecord创建,但AJAX部分本身不起作用 – 它应该导致
application.js中:
$(document).ready(function(){ $("#upload input").change(function(event){ $(this).parent().ajaxSubmit({ beforeSubmit: function(a,f,o) { o.dataType = 'json'; }, complete: function(XMLHttpRequest, textStatus) { $("#img_div").html(''); }, }); }); });
更改文件字段时将表单绑定到ajaxSubmit,这很正常。 .html()似乎有问题,因为字符串只是打印在
_form.html.erb:
该行在页面刷新时可以正常工作以呈现集合。
我知道Ruby代码没有问题,因为我之前在create.js.erb文件中有这个确切的行。 我会继续使用这种方法,除非我现在使用ajaxSubmit,我无法将创建操作呈现为JS – 它总是呈现为HTML。
所以理论上我可以用两种方法解决问题 – 弄清楚为什么ruby代码在application.js中呈现为字符串,或者将pictures#create
#create呈现为JS。
我做错了什么事情没有发生?
编辑:
好的,所以我似乎无法在applications.js中使用Ruby代码或变量,并且尝试将Ruby集合传递给JavaScript不起作用,因为我无法访问我需要重新创建的所有属性正确的HTML。
我需要的是一种确保pictures#create
动作被称为JS的方法。 然后我可以使用format.js
来确保使用format.js
,我知道我的代码可以工作。 任何建议?
如果它位于视图中的脚本中,则只能在javascript中嵌入ruby代码。 public/javascripts/
任何内容都不会命中服务器,因此无法找到ruby变量。
您要做的是在包含脚本之前将ruby变量存储在javascript变量中。
<%= javascript_include_tag :defaults, 'application' %>
通过这种方式,您不必编写大量的内联脚本,这些脚本会让那些不引人注目的人感到厌烦。
问题是你试图在浏览器大小的JavaScript中运行ruby代码:
'<%= escape_javascript(render(@picture.idea.pictures)) %>'
相反,您应该使用HTML方法设置已经渲染的内容(@ picture.idea.pictures)
- 从2.2.1中升级到jquery-datatables-rails 2.2.3会破坏RailsCasts 340 Datatables中的代码
- 使用ajax部分修复渲染
- Ruby on rails:如何从登录弹出窗口向用户提供的凭据发送一个AJAX请求到rails控制器
- 如何使用jquery无法正常工作来限制嵌套表单字段
- 全球位置(国家,地区,城市)选择Rails,jQuery或Google Maps API的插件?
- js.erb没有执行javascript但是处理了rails
- 修复投票机制
- 如何通过jquery渲染rails表单?
- 在使用带有Rails的Select2插件时未定义$,未捕获的ReferenceError