【问题标题】:Rails: GoogleDocs-Style AutosaveRails:GoogleDocs 风格的自动保存
【发布时间】:2011-04-08 15:46:53
【问题描述】:

我正在尝试构建一个 Rails 应用程序,您可以在其中从页面上的多个不同位置编辑相同的模型。我希望每 X 秒自动保存一次更改,并可选择手动触发保存。

我想出了一个解决方案,但它似乎很复杂,而且我认为其他 Rails 用户已经遇到过类似的问题。

我想出的解决方案是在我的页面上设置一个隐藏表单,即实际提交的表单,然后在页面周围散布多个“虚拟”表单来更新隐藏表单。

一旦提交,隐藏表单会更新模型,并且模型包含确定应返回哪些 RJS 文件作为响应的逻辑。这些被捆绑并作为更新响应发送。

一些限制:

  • 无法将整个页面包装在一个表单标签中(页面上有多个模型/控制器)
  • 同一字段可能可以从多个位置进行编辑

谁有更有效的方法?

【问题讨论】:

    标签: ruby-on-rails ajax webforms


    【解决方案1】:
    • 在页面中创建尽可能多的表单,即使是相同模型的相同实例也是如此
    • 触发更新可以是 javascript setInterval 调用,也可以是表单字段上的 onblur。
    • 您的控制器应该是 REST 控制器,它会在 json 变量中返回成功或错误消息以及 HTTP 状态(200、422)
    • 忘记 rjs,考虑客户端。页面中的每个表单都会将表单提交给控制器的更新方法。提交表单的 javascript 将有一个错误或成功回调,然后将显示成功或错误消息。这个想法是,发送表单的 javascript“知道”它当前正在提交哪个表单,并且它应该能够根据它正在提交的表单本身显示错误或成功,这不是控制器的工作。
    • 保存整个页面只是序列化所有表单中的所有字段并将其发送到更新方法。 (见serialize

    【讨论】:

    • 1.如何避免输入字段之间的 id 冲突?请记住,我希望允许在多个不同位置编辑同一个字段
    • 2.在不使用 RJS 的情况下,我将如何处理更新表单字段的所有表示?我不想为单个字段更新刷新整个页面。
    • for 1. 您可以将 :id 参数传递给您的输入助手。 'bla' %> 然后由你来处理你的 id 以避免冲突。也许您可以在表单名称前面加上前缀
    • for 2. 我在这里设置了一个非常基本的示例 gist.github.com/570183 :您有两个表单,一个 JavaScript 函数 submitAllForms() 旨在定期调用(未完成)它将放置良好输入周围的绿色边框和不良输入中的红色或黄色(取决于形式)。没有 rjs,只有 json 和 javascript。
    • 首先,为提供源代码的答案+1。其次,您正在处理一个简单的场景,成功提交表单并不会改变页面。但是,如上所述,一旦更改了表单,就需要更新其他表单以及页面元素(例如,我有 3 个表单,用户可以在其中更改用户名)。如果更新了这些表单之一,则更改应在整个页面中传播。我看不出提议的解决方案如何扩展以支持这种行为而不变得无法维护。
    猜你喜欢
    • 2013-04-09
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多