1

所以有很多关于如何做到这一点的文章,但肯定有一个最佳实践......而且我不知道如何过滤掉愚蠢的解决方案、好的解决方案和最好的解决方案。

我只是想通过 ajax(在对话框中)提交我的表单并像不使用 ajax 一样恢复错误......这意味着我喜欢 rails 标准错误处理/flash 消息/标签类。

  • 重新加载整个部分的最佳方法是什么?
  • 将 .js.erb (或咖啡)用于部分内容的最佳方式是什么?(如果是这样,你能解释一下如何使用这些部分吗?
  • 以某种方式将 JSON 解析回表单的最佳方法是什么?

我的 [有限] 知识库中还缺少什么?

4

2 回答 2

1

我这样做的方式是呈现create.js.erb如下视图:

$("#my_dialog").replaceWith("<%= j(render 'dialog') %>");

其中_dialog.html.erb包含对话框内容的 HTML。

<div id="my_dialog">
  <!-- flash stuff etc -->
  <%= form_for ... %>
  <!-- ... -->
  <% end %>
</div>

例如,您的控制器将如下所示:

class EntriesController < ApplicationController
  def create
    @entry = Entry.new(params[:entry])
    respond_to do |format|
      if @entry.save
        format.html { redirect_to @entry }
        format.js {} # this will render create.js.erb for js requests
      else
        format.html { render action: "new" }
        format.js {} # this will render create.js.erb for js requests
      end
    end
  end
end

像'dat一样的峰会。如果您不想重新加载整个表单,您可以更新或做任何您想做的事情.js.erb

于 2013-05-23T16:23:41.367 回答
0

使用 js.erb 是要走的路。理由如下:

重新加载页面的一部分基本上违背了 Ajax 的目的——即修改页面而无需重新加载或刷新任何内容。并且解析 JSON 会非常乏味。

使用 js.erb 可以让您轻松利用 Rails 提供的验证。在您的 js.erb 中,您可以访问通常从控制器访问的任何内容,包括验证错误,您可以根据这些错误更新 DOM 元素。由于您正在修改单个 DOM 元素,因此您无需担心您的表单可能位于部分内部这一事实。

于 2013-05-23T16:22:54.710 回答