2009-11-17 118 views
9

我听到一群铁轨开发者说RJS是邪恶的。我从来没有使用它,因为我总是设法使用经典的JavaScript或jQuery来做我想要的,所以我没有注意。现在我正在进入一些遗留代码,并且在那里有RJS。RJS是邪恶的,为什么?

所以...是真的吗?使用RJS有什么缺点/优点?

+0

RJS的立场是什么? – JaredPar 2009-11-17 17:35:03

+1

@JaredPar红宝石Javascript – Joseph 2009-11-17 17:37:01

+2

大声笑 - 起初我以为这说“RMS”,我想知道你对Richard Stallman或均方根有什么反应。 – 2009-11-25 06:37:59

回答

30

让我们来谈谈RJS在进入它是否是邪恶之前。

RJS将相同级别的抽象应用于ActiveRecord为SQL提供的高功能Javascript库。然而,JavaScript库的RJS覆盖范围远不及ActiveRecord对SQL适配器的覆盖范围。

Rails仅支持原型/ Script.aculo.us的RJS支持。但是,有些插件可用或正在开发中以支持其他Javascript库。例如JRails重写基于Prototype的助手以使用jQuery。类似的插件存在于mootools和可能的Dojo中。

认为RJS是邪恶的人通常是那些对原型代码不熟悉的人,或者是那些认为他们可以用原始Javascript更容易完成的事情的人。

RJS并不完美,就像ActiveRecord不完美一样,每隔一段时间,您都必须写下原始的Javascript或SQL来完成您的工作。再次像ActiveRecord一样,使用高级选项越舒适,无需编写原始代码即可实现更多功能。

RJS的一个奇妙之处在于,它们本质上是视图,可以生成Javascript。将RJS提取出来可以根据需要包含在部分中,这很容易,既可以作为对控制器的响应,也可以作为页面中包含的自定义Javascript函数的一部分。这使得代码更加干燥,从而实现更简单的维护。

我个人经常使用RJS。我发现它是一次接触大量DOM元素的完美方式。它具有让我创建AJAX丰富站点的双重好处,而无需编写太多的Javascript。然后我又恨写Javascript。

+1

+1对解释优点和缺点的优秀和简洁的回答。作为一名RoR新手,我总是想知道我是否应该在应用程序中使用RJS,或者使用像jQuery这样的库并自行处理。 – 2009-11-21 01:21:23

+1

一个很好的答案,谢谢! – 2009-11-23 11:52:48

+0

+1:荣誉EmFi!我对RJS或红宝石一无所知。 (好吧,我知道他们存在...)我已经给出了一个+1,因为你讨论了关于RJS的事实以及人们为什么喜欢和不喜欢RJS的动机。做得好! – 2009-11-27 01:49:36

5

考虑到我在我的Rails项目中用JQuery替换了我的底层Prototype库,我发现RJS非常有用。现在,将JavaScript传回到要执行的服务器并不是主流。

但是,我发现一般RJS没有问题。我唯一的抱怨是,我通常必须将RJS和普通的旧Javascript混合到我的.rjs文件中,所以它有点没有意义。但它确实给了你一个干净的地方/方式来处理你的Javascript效果和AJAX调用,所以我认为它是一个“放置代码的标准位置”,这非常好。

+0

感谢您的回答!你可以把jQuery /经典JavaScript放入.rjs文件中吗? – marcgg 2009-11-17 17:46:37

+1

@marcgg - 如果您使用的是JRails(http://github.com/aaronchi/jrails),那么您可以将JQuery放入其中。但是,无论您使用哪种库,传统的Javascript都可以工作。有一种特殊的方法可以插入它。查看http://dev-journal.3dmdesign.com/development/qa-how-to-javascript-in-rjs-templates了解更多信息。 – 2009-11-17 18:10:14

3

我不知道我是否会说邪恶,但RJS(或任何服务器端语言生成JS)不会是我的第一选择。我更愿意亲手写JS。使用jQuery,我真的很喜欢编写JS,并将JS保存在application.js中,感觉很干净。

扩大一点......我将RJS视为不必要的抽象。我想知道JavaScript和jQuery。我想知道如何操作DOM以及如何进行AJAX调用。有了我的JS/jQuery知识,我可以很容易地移动到anotherframework,并且不会怀疑框架是否会为我处理我的JS。

+0

RJS是嵌入式Ruby的JavaScript文件。这是一个与JavaScriptHelpers等不同的问题,它允许您执行以下操作: page.insert_html:bottom,'list', content_tag(“li”,“Fox”) – MattMcKnight 2009-11-24 05:25:58

+0

对,您正在编写Ruby代码以生成JavaScript,如果这对你有用,那真是太棒了。这不适合我。 – 2009-11-24 07:12:49

+0

我想这不是我所说的RJS。 RJS模板更像html.erb文件 - 用于将JS返回给浏览器的模板,以作为对AJAX调用的响应进行评估。他们可能都是手工编码的JS,但把红宝石放在那里让我们插入你程序的其余部分的值。 – MattMcKnight 2009-12-20 06:23:33

1

RJS很好,主要是因为它很容易集成到Rails项目中。为了保持简单并保持文件数量较低,可以将其嵌入到控制器中,并且从原型/ scriptaculous库中有许多易于使用的助手。它感觉更像Ruby。

它意味着它不像您正常的Rails代码那样干净地分离,因为它与其他代码很快混合在一起。它还需要通过原型和脚本化js文件包含更多的外部库。

一些jQuery的东西很干净。语法非常疯狂,但它意味着你可以将你的js完全从你的页面/控制器(不引人注目的js)中拉出来,这是一种更干净/更划分的做事方式。

更何况,jQuery看起来像JavaScript。所以你不会看到javascript和Ruby代码的奇怪组合。我喜欢Ruby。我不喜欢Javascript。但我更喜欢两者的混合。如果你知道JS,它会看起来很熟悉。

Ryan Bates将RJS转换为jQuery的截屏视频。可以给你一个两个语法上的区别的好主意:http://railscasts.com/episodes/136-jquery

+0

“还有什么,jQuery看起来像javascript,所以你不会觉得javascript和Ruby代码混在一起。” 这个说法是倒退的。与帮手,你没有得到你的代码中的JavaScript代码,你会得到: page.insert_html:bottom,'list', content_tag(“li”,“Fox”) – MattMcKnight 2009-11-24 05:15:34

+0

这就是如果你争论RJS 。如果我争论JS,我不想在我的JS中使用Ruby代码。仍然有很多实例获得正确的JS功能,我最终使用JS而不是所有这些“助手”。它更容易。使用jQuery,我可以将所有内容从我的Ruby代码转移到Javascript中,并仅在必要时使用助手。 – Lukas 2009-11-24 19:49:16

1

如果您不熟悉JS(或Prototype等框架),但需要AJAX功能 - RJS是最好的方法。使用RJS的另一个优点是速度。方便快捷地写入RJS代码。

我在之前的所有Rails项目中都使用过RJS。现在我对Prototype(和jQuery)更加熟悉了,这就是我现在写JS代码的原因。我需要这个,因为拥有大量RJS的控制器失去了生产力。并且将JSS代码移出到JS是缩放控制器的第一步。

没有人可以绝对地对你说,最好的方法是什么 - 使用RJS或不使用RJS。大家应该选择自己的方式。

例如,我更喜欢使用我的应用程序的管理部分中的RJS(无需缩放任何东西),并为前端部分编写JS。

1

RJS不是“邪恶”的,但我认为它的问题是双重的:

  1. 很难(不可能的?)做不显眼的JavaScript和RJS。如果你正在编写一个Javascript负载很大的应用程序,并且有很多逻辑,而且逻辑也改变了,你将不得不改变相当数量的文件,而不是只改变一个文件。另外,这是个人偏好,看到标有压缩的Javascript的标签在整个过程中是相当丑陋的。

  2. RJS提取掉Javascript,这可能导致对该语言的无知。 RJS背后的想法是使开发人员能够使用一种语言Ruby编写Web应用程序的所有内容(除了设计人员可能处理的HTML和CSS)之外,但在实践中,这同样会出现短缺通过拖放控件或使用大量生成向导的繁重代码来创建ASP.NET应用程序是可能的,但不推荐。如果你需要的只是一个简单的解决方案,需要Ajax的传播,那么RJS就可以正常工作。

RJS是当你刚开始使用Rails的,需要的是有节制地使用(例如一些“快速和肮脏的” Ajax效果的好工具,对于消失在同一博客的典型评论页)。一旦你开始需要沉重的Javascript使用,那么RJS就变得更加负责任了,因为它将开发者从他们真正应该试图理解的东西中屏蔽了出来。

+0

JavaScript不是最不引人注目的JavaScript形式吗? – MattMcKnight 2009-11-24 05:12:26

+0

RE:第2点。我知道很多开发人员在没有使用某种工具的情况下无法编写Web服务,也无法在IDE的帮助下进行重构。我认为问题在于开发人员,而不是工具 – 2009-11-26 21:34:14

0

RJS只是RHTML(现在称为html.erb)的JavaScript等价物。它是一个执行嵌入式Ruby的模板,并将JavaScript返回给浏览器以更新页面。这使您可以更好地控制AJAX应用程序中服务器端操作的结果。实际上,RJS调用的结果由浏览器中的JavaScript解释器进行评估。将其与非RJS AJAX应用程序进行对比,其中服务器返回通过异步请求的回调插入页面的HTML。

“邪恶”部分是许多人对“eval”感到不舒服,但我认为这也可能是某种混乱的结果。

这里的许多回复似乎都集中在JavaScript,Prototype和Scriptaculous Helpers上,它们经常用作RJS模板的一部分,但并不是必需的。我会广泛使用这些助手,因为他们在模板中更好地使用Ruby代码,但它们不是RJS的必要组成部分。