在Ruby和JavaScript中复制计算的最佳方式是什么?
问题描述:
我有一个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函数。它看起来像一个,但它有双引号。
我在这儿吠错了树吗?我觉得有一些非常简单的方法来做到这一点,但我完全错过了它。 :)
答
对于像这样简单的事情,我会建议编写一个纯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 '';
}
答
让它从JavaScript的AJAX调用Web服务器,如果它不是一个需要快速完成。使用Rails,只需拨打
remote_function :url => remote_request_url,
:update => dom_id_to_update
并让它在控制器方法中将结果呈现为文本。
我同意Marc的说法,这看起来有点像旋转你的*。但要获得一个函数,你只需要在你的Javascript中评估收到的字符串。 – Chuck 2009-05-27 19:58:27
啊哈,JavaScript eval很棒。事实证明,您可以使用eval不仅返回数据,而且还可以从字符串构建函数。它有点笨重,根本不是Rubyish,但它的工作原理。感谢名单! – 2009-05-28 14:47:23
如果你有一个Rails服务器,为什么你不能在服务器端用ruby写它,然后在客户端调用它? – Zane 2012-10-24 15:34:08