2012-12-03 80 views
1

我在Rails項目中擁有Google Chart的ColumnChart。這是通過調用呈現JSON的Rails控制器操作在JavaScript中生成和填充的。保存並更新Rails中基於AJAX的圖形的狀態

該圖表顯示了客戶的一個月的信息價值。

在圖表上方,我有下一個和上一個箭頭,允許客戶更改圖表上顯示的月份。它們沒有任何功能。

我的問題是,根據客戶查看圖表的當前月份,保存圖表狀態的最佳方法是什麼?

這裏是我是如何做思想工作流程:選擇

  1. 一個箭頭。
  2. 此事件在JavaScript中捕獲。
  3. 對Rails動作渲染JSON的另一個請求是通過基於箭頭按鈕(Either +或 - )的數據屬性傳遞的附加GET參數 執行的。
  4. 圖表使用新的JSON響應重新呈現。

會在服務器端執行增加或減少圖形當前日期的邏輯嗎?將圖表的日期存儲在會話數組中默認爲第一次加載時的當前日期?

另一方面,在JavaScript代碼或Cookie中將客戶端的圖表狀態保存起來是否有意義,然後在將日期發送到Rails控制器之前對其進行處理?

我一直在使用Rails進行開發約6個月,感覺很舒服,但最近纔開始使用AJAX開發JavaScript。我將JS代碼與Rails捆綁在一起的經驗在某些方面受到限制,所以尋找一些關於如何解決這個問題的建議/最佳實踐。

任何意見是非常感謝。

回答

1

我要通過幾個選項,一些好,一些壞。

首先,您絕對不想做的事情是維護您在Cookie或任何其他形式的持久服務器端存儲中的月份。當然有時候服務器狀態是必須的,但是當它們是簡單的替代品時不應該使用它。 REST的一部分(Rails主要是圍繞它構建的)試圖用純屬性來表示數據,而不是讓它的狀態像那樣傳播。

從這裏,大多數解決方案可能是可以接受的,並且意見發揮更大的作用。你可以做的一件事是使用當前月份從+/-符號計算一個月,然後發送給服務器,服務器將返回所請求月份的信息。

雖然我不是一個很大的粉絲,但是您必須編寫能夠創建有效日期範圍的JavaScript,並且大部分功能可能已經在服務器上。只需將+/-和本月的服務器傳遞到服務器即可,您只需執行一些額外的路由和邏輯即可將服務器上的標誌解析爲不同的月份。

雖然其中任何一個都可以工作,但我的首選解決方案會讓該月的初始請求生成鄰近月份的有效表示,並將其返回給客戶端。然後,當您使用請求的數據更新圖形時,還可以使用服務器提供的圖形替換圖形上的前進/後退鏈接。這提供了前兩種解決方案的優點 - 在服務器上沒有額外的路由,並且沒有對客戶端代碼的實質性增加。此外,您還可以將轉換變爲幾個月,而無需從客戶那裏收集數據(即在客戶和未來之前)。如果沒有這些,你將不得不創建單獨的邏輯來處理客戶對不存在的信息的請求,這對你來說是額外的工作,並且會給客戶帶來更多的困惑。

+0

謝謝,這是一個不錯的方法。保存我處理hacky會話代碼。 – MalcolmDurling

相關問題