这已经困扰了我三天了。我有一个表单,我提交,然后我根据验证的成功将javascript代码注入页面。我的控制器动作很简单,看起来像这样:
def create
@cat = Cat.new(cat_params)
@cat.save
end
触发create.js.erb
:
<% if @cat.new_record? %>
$('#my_div').html('<%= j render('form') %>');
<% else %>
$('#cats').append("done");
<% end %>
create.js.erb
中的第一行检查猫是否是新记录。如果是,则表示验证失败,并呈现带有验证错误的新表单。这是我遇到问题的地方。新表单与错误一起显示,但当我尝试再次提交表单时,它不起作用,它只是在另一页面上显示表单代码。因此,想象一个完全空白的页面,在成功的情况下显示来自create.js.erb
的代码:
$('#my_div').html('ALL CODE OF MY RE-RENDERED FORM. Really all source code of my form is displayed here with all tags and everything. Like javascript didn't insert anything.');
如果失败:
$('#cats').append("done");
Javascript代码根本不活跃。我有一个远程表单,用于创建像这样定义的新cat
:
<%= form_for @cat, remote: true, format: 'js', method: 'post', :html => {:multipart => true} do |f| %>
我正在为我的表单使用jQuery-File-Upload,但在这种情况下它应该不是问题:
jQuery ->
$('#new_cat').fileupload
dataType: "script"
add: (e, data) ->
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))
$('#new_cat').append(data.context)
else
alert("#{file.name} is not a gif, jpeg, or png image file")
$("#submit_button").on 'click', ->
data.submit()
progress: (e, data) ->
if data.context
progress = parseInt(data.loaded / data.total * 100, 10)
data.context.find('.bar').css('width', progress + '%')
我真的不明白这可能是个问题。我正在使用turbolinks所以也许这可能是一个问题,但我不明白为什么javascript是对某些行为的回应不会被翻译。任何想法可能是一个什么问题?