我听到很多Rails开发者说RJS是邪恶的。我从来没有使用过它,因为我总是能够使用经典的JavaScript或jQuery做我想要的事情,所以我没有注意到它。现在我正在接触一些遗留代码,而且到处都是RJS。
那么...这是真的吗?使用RJS有什么缺点/优点?
我听到很多Rails开发者说RJS是邪恶的。我从来没有使用过它,因为我总是能够使用经典的JavaScript或jQuery做我想要的事情,所以我没有注意到它。现在我正在接触一些遗留代码,而且到处都是RJS。
那么...这是真的吗?使用RJS有什么缺点/优点?
RJS很好,主要是因为它很容易集成到Rails项目中。为了保持简单和文件数量低,您可以将其嵌入控制器中,并且它具有来自prototype/scriptaculous库的许多易于使用的帮助程序。它感觉更像Ruby。
这意味着它与您的常规Rails代码没有那么清晰地分离,因为它很快就会与您的其他代码混合在一起。它还需要通过prototype和scriptaculous js文件包含许多外部库。
jQuery的一些东西非常干净。语法相当疯狂,但这意味着您可以完全将js从页面/控制器中删除(无侵入式js),这是一种更清洁/分隔的做事方式。
更重要的是,jQuery看起来像javascript。因此,您不会得到奇怪的javascript和Ruby代码混合。我喜欢Ruby。我不喜欢Javascript。但我更不喜欢两者的混合。如果您了解JS,则它会很熟悉。
Ryan Bates有一个关于将RJS转换为jQuery的视频教程。这可能会让你对两者在语法上的区别有一个很好的了解:http://railscasts.com/episodes/136-jquery
RJS并不是“邪恶”的,但我认为它存在两个问题:
使用RJS很难(甚至不可能)做到无侵入式JavaScript。如果你正在编写一个JavaScript重度应用程序,并且有很多逻辑,而且这些逻辑会发生变化,那么你将不得不更改相当数量的文件,而不仅仅是一个文件。此外,这是个人偏好,看到带有压缩JavaScript的标签散布其中相当丑陋。
RJS抽象了JavaScript,这可能导致对语言的无知。 RJS背后的想法是使开发人员能够仅使用一种语言(Ruby)编写Web应用程序的所有内容(除了设计师可能处理的HTML和CSS),但实际上,这与通过拖放控件或使用大量生成代码向导来创建ASP.NET应用程序的方式类似,虽然可能,但不建议这样做。如果您只需要一个需要少量Ajax的简单解决方案,则RJS可以正常工作。
RJS是一个很好的工具,当你刚开始使用Rails并需要一些“快速而肮脏”的Ajax效果时,可以少量地使用它(例如,在同一页上淡入的博客的规范评论)。一旦你开始需要大量使用JavaScript,RJS就变成了更多的负担,因为它会屏蔽开发者应该尝试理解的东西。
RJS是JavaScript版的RHTML(现在称为html.erb)。它是一个模板,执行嵌入式Ruby并返回JavaScript到浏览器以更新页面。这使您可以更好地控制在AJAX应用程序中作为服务器端操作结果发生的情况。实际上,RJS调用的结果由浏览器中的JavaScript解释器评估。与非RJS AJAX应用程序相比,其中服务器返回插入到异步请求回调中的HTML,这与之形成对比。
“邪恶”的部分是许多人不喜欢“eval”,但我认为这也可能是某种混淆的结果。
这里的许多响应似乎集中在JavaScript、Prototype和Scriptaculous Helpers上,这些通常被使用,但不是RJS模板的必要部分。我确实广泛使用这些助手,因为它们与模板中的Ruby代码更流畅,但它们不是RJS的必要部分。