2010-09-06 48 views
6

我正在嘗試構建一個Rails應用程序,您可以在其中編輯頁面上多個不同位置的相同模型。我希望每隔X秒自動保存更改,並選擇手動觸發保存。Rails:GoogleDocs-Style Autosave

我想出了一個解決方案,但它似乎很複雜,我認爲其他的Rails用戶已經面臨着類似的問題。

我想出瞭解決辦法,是讓我的網頁上隱藏的形式,實際上是提交了一個,然後有散落的是更新隱藏表單頁面各地的多個「虛擬」的形式。

提交後,隱藏的表單更新模型,該模型包含的邏輯來確定哪些RJS文件應該在響應中返回。這些捆綁在一起並作爲更新響應發送。

一些限制:

  • 在一個表單標籤(有多個型號/頁面上的控制器)
  • 同一領域可能是從多個位置
  • 編輯不能完成整個頁面

任何人有一個更有效的方法?

回答

3
  • 如您在頁面中即使是同一型號
  • 觸發更新的同一個實例的需要是,要麼一個JavaScript的setInterval呼叫,或在您的表單域的onblur創造儘可能多的形式。
  • 你的控制器應該是一個REST的,它會返回成功或錯誤消息在JSON變量和HTTP狀態(200,422)
  • 忘記rjs,認爲客戶端。頁面中的每個表單都會將表單提交給控制器的更新方法。提交表單的JavaScript將有錯誤或成功回調,然後將顯示成功或錯誤消息。這個想法是,發送表單的JavaScript「知道」它正在提交的表單的形式,它應該能夠顯示錯誤或成功,通過它自己提交表單的形式,它不是控制器的工作。
  • 保存整個頁面只是序列化所有窗體中的所有字段並將其發送到更新方法。 (見serialize
+0

1.我將如何避免輸入字段之間衝突的id?記住我想允許在幾個不同的位置編輯相同的字段 – shmichael 2010-09-08 12:22:44

+0

2.如何在不使用RJS的情況下更新更新表單域的所有表示?我不想刷新整個頁面進行單個字段更新。 – shmichael 2010-09-08 12:23:27

+0

爲1.你可以傳遞一個:id參數給你的輸入助手。 <%= f.text_field:name,:id =>'bla'%>然後由你來照顧你的id以避免碰撞。也許你可以用表格名 – hellvinz 2010-09-08 13:07:34

相關問題