0

在我的 Rails 3 应用程序中,我有许多带有表单的页面,用户可以在其中创建记录然后对其进行编辑。要创建记录,用户单击“添加记录”按钮,会弹出一个模式对话框,其中包含“新记录”表单。一旦用户填写表格并按下保存,模式对话框就会消失并且表格部分更新,显示新记录。要编辑记录,用户单击任何现有记录旁边的编辑链接,这会打开一个模式对话框,其表单与“新记录”表单类似,但标题为“编辑记录”和“保存编辑” , ETC。

现在,我正在使用两个部分进行此操作:表格部分和表单部分。表单部分根据@editing 变量是否为真显示“编辑”标题。

它目前的工作方式是,当用户单击“新建记录”按钮时,它有一个 onClick 函数,它可以做两件事。

1) jquery ajax 调用“新”操作创建必要的对象并呈现部分像这样:

@editing = false
respond_to do |format|
    format.js
    {
      render :update do |page|
         page["#entry_div"].html(render :partial=> 'form');
      end
  }
end

2) 将 div 显示为模式对话框 (simplemodal) 的 jquery 调用。

单击对象的编辑按钮执行相同的操作,除了“编辑”操作将@editing 设置为 true,并且 Ajax 调用发送要编辑的对象的 id。

此外,当用户按下保存并保存对象时,“创建”和“更新”操作都执行以下操作:

respond_to do |format|
    if @record.save
    @all_records = Record.where(:project_id => @project.id).all
        format.js {
            @save_message_div = 'save_message_div'
            @table_container = 'table_div'
            @table_partial = 'table'
            @form_partial = 'form'
            @form_container = "entry_div"
            render 'saved'
        }
    end
end

'saved' 是一个 .rjs 文件,用于更新部分表格、重置表单并显示“已成功保存”消息。

我的问题是,基本上,我这样做对吗?进行这些调用的最新、最有效和最不引人注目的方式是什么?我是否仍应在我的操作中使用 page["#divname"].html(render partial) 类型调用?我是否仍应使用 rjs 文件重新加载部分内容并显示保存消息?如果没有,我该如何处理这些情况(加载部分等)?

非常感谢,如果您需要更多信息,请告诉我。

4

1 回答 1

1

我建议根本不要使用 RJS(即渲染:更新)的东西。
您应该研究的是 UJS(不显眼的 javascript)。
通常的想法是,您从控制器操作中使用 JSON 响应,然后使用该数据相应地填充或修改您的视图。您还可以从控制器(通过render_to_string)
返回预渲染的部分,并用它替换页面上的任何现有元素。

@model = Model.create(params[:model])

respond_with do |format|
  format.json { render :json => @model.to_json }
  format.html { # do something else }
end

现在,在您的 javascript 中,您将一个回调绑定到您的 AJAX 响应,并使用返回的 JSON 来操作您的 DOM,无论您喜欢什么。

于 2011-04-27T21:19:35.390 回答