作为对控制器动作的响应的Javascript显示它自己的代码

时间:2014-11-05 03:07:05

标签: javascript jquery ruby-on-rails ajax turbolinks

这已经困扰了我三天了。我有一个表单,我提交,然后我根据验证的成功将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是对某些行为的回应不会被翻译。任何想法可能是一个什么问题?

0 个答案:

没有答案