我有一个模型,我希望通过ajax在对话框中显示编辑和更新。 我现在做的是什么:
要打开模态并渲染局部,我向控制器发送ajax请求#show with ujs
这是链接:
<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')
)
如果问题不够明确,请发表评论