我有一个模型,我想通过 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')
)
请评论,如果问题不够清楚