对于这种类型的应用程序(使用大量javascript的rails),调用javascript和渲染局部的正确方法是什么?



在我的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。

相关内容

  • 没有找到相关文章

最新更新