1

我有一个模型,我想通过 ajax 在对话框中显示编辑和更新。我现在做什么:

要打开 Modal 并渲染部分,我使用 ujs 向 controller#show 发送 ajax 请求

这是链接:

<a class="person-dialog" data-remote="true" data-type="script" href="/en/people/32" 
onclick="return false">Fidel Markus Armstrong</a>

这会在 new.js.erb 中运行脚本,该脚本会在对话框中呈现部分显示并打开它。

要获得编辑表格,我也会这样做

<a class="person-dialog" data-remote="true" data-type="script"
href="/en/people/32/edit" onclick="return false">Fidel Markus Armstrong</a>

这运行 edit.js.erb

现在:要更新我的模型,我将表单数据作为 json 发送到控制器#update

<form accept-charset="UTF-8" action="/en/people/32" class="form-horizontal"
data-remote="true" data-type="json" id="edit_person_32" method="post">

如果表单中有错误,我会render_to_string(form_partial)在控制器内部执行并在 json 响应中对此进行响应。现在我在 json 对象中有部分 html。我这样做是为了获取 rails 错误消息和 fields_with_errors。

有更好的方法吗?脚本和 json 格式之间的所有混合以及 json 中的部分 html 都感觉不对。

这是表单提交的 ajax.success:

$('#dialog').on('submit', ->
  $(this).find('form').bind('ajax:success',(evt, data, status, xhr) ->

    if xhr.status == 201 # :created
      url = data.url #this is en/people/:id

      #Load show dialog on success - runs show.js.erb
      $.ajax({
        url: url,
        type: 'get',
        dataType: 'script'
      })
    else
      #Render the dialog html including the error messages and fields with errors
      #data.error is the partial
      $('#person-dialog').html(data.error) 
      $('.field_with_errors input').first().trigger('focus')
      $('.modal-header').prepend('edit')

)

请评论,如果问题不够清楚

4

0 回答 0