2009-05-27 38 views
0

我有一個Ruby on Rails應用程序,我需要在Ruby和JavaScript中複製一些計算。 Ruby用在服務器端,但我也需要使用JavaScript在瀏覽器上計算學生成績。在Ruby和JavaScript中複製計算的最佳方式是什麼?

我的第一個想法是使用字符串構建JavaScript函數,將其轉換爲JSON,並將其發送到瀏覽器,並在其中解碼並用作普通的JavaScript函數。這聽起來對你有用嗎?我試過一些簡單的東西,比如

 
def letterGradeCalc 
    "function calcLetterGrade(score) { 
    if(score >= 90) { return 'A'; } 
    else if(score >= 80) { return 'B'; } 
    else if(score >= 0) { return 'F'; } 
    else return ''; 
    }".to_json 
end 

但是當瀏覽器得到它時它不是一個有效的JavaScript函數。它看起來像一個,但它有雙引號。

我在這兒吠錯了樹嗎?我覺得有一些非常簡單的方法來做到這一點,但我完全錯過了它。 :)

+1

我同意Marc的說法,這看起來有點像旋轉你的輪子。但要獲得一個函數,你只需要在你的Javascript中評估收到的字符串。 – Chuck 2009-05-27 19:58:27

+0

啊哈,JavaScript eval很棒。事實證明,您可以使用eval不僅返回數據,而且還可以從字符串構建函數。它有點笨重,根本不是Rubyish,但它的工作原理。感謝名單! – 2009-05-28 14:47:23

+0

如果你有一個Rails服務器,爲什麼你不能在服務器端用ruby寫它,然後在客戶端調用它? – Zane 2012-10-24 15:34:08

回答

5

對於像這樣簡單的事情,我會建議編寫一個純JS文件的功能,幷包括它。從ruby生成JS聽起來像是嚴重的矯枉過正。然後在Ruby中編寫相同的函數。

如果這是一個適度複雜的算法,我建議只寫在Ruby中,並使一個Web服務從JS調用。

編輯,並稱得到了在下面我的評論mungled代碼:

function calcLetterGrade(score, lowCutoff, hiCutoff) 
{ 
    if(score >= hiCutoff) { return 'A'; } 
    else if(score >= lowCutoff) { return 'B'; } 
    else if(score >= 0) { return 'F'; } 
    else return ''; 
} 
2

讓它從JavaScript的AJAX調用Web服務器,如果它不是一個需要快速完成。使用Rails,只需撥打

remote_function :url => remote_request_url, 
       :update => dom_id_to_update 

並讓它在控制器方法中將結果呈現爲文本。

相關問題