使用jquery,ajax的bootstrap模式中的CRUD模型 - 最佳实践

时间:2013-09-19 19:32:18

标签: ruby-on-rails json jquery twitter-bootstrap dialog

我有一个模型,我希望通过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')

)

如果问题不够明确,请发表评论

0 个答案:

没有答案