在我的Rails 3应用程序中,我有许多带有表单的页面,用户可以在其中创建记录,然后编辑它们。要创建一条记录,用户单击"添加一条记录"按钮,这将弹出一个模态对话框,其中包含"新记录"表单。一旦用户填写了表单并按下Save,模态对话框就会消失,表格部分更新,显示新记录。要编辑一条记录,用户单击任何现有记录旁边的编辑链接,这将弹出一个模态对话框,其窗体与"新记录"窗体类似,但具有"编辑记录"one_answers"保存编辑"等标题。
现在,我正在使用两个偏导数:表偏导数和表单偏导数。表单部分根据@editing变量是否为真显示"Edit"标题。
它目前的工作方式是,当用户单击New Record按钮时,它有一个onClick函数做两件事。
1)一个jquery ajax调用一个"new"动作,创建必要的对象,并像这样呈现部分:
@editing = false
respond_to do |format|
format.js
{
render :update do |page|
page["#entry_div"].html(render :partial=> 'form');
end
}
end
2)一个jquery调用,将div显示为一个模态对话框(simplemodal)。
点击一个对象的编辑按钮做同样的事情,除了"edit"动作将@editing设置为true,并且Ajax调用发送要编辑对象的id。
此外,当用户按下保存键并保存对象时,"创建"one_answers"更新"操作都执行以下操作:
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文件,它部分更新表,重置表单,并显示"saved successfully"消息。
我的问题是,基本上,我这样做对吗?做这些电话的最新、最有效、最不显眼的方式是什么?我还应该使用页["#divname"].html(渲染部分)类型调用在我的行动?我还应该使用rjs文件来重新加载部分和显示保存消息吗?如果没有,我该如何处理这些情况(加载局部等)?
非常感谢,如果你需要更多的信息,请告诉我。
我建议不要使用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。