Rails 3 UJS Ajax 模式/策略,哪个更好?

Posted

技术标签:

【中文标题】Rails 3 UJS Ajax 模式/策略,哪个更好?【英文标题】:Rails 3 UJS Ajax pattern/strategy, which one is better? 【发布时间】:2011-09-09 15:55:52 【问题描述】:

我工作的公司最近从 Rails 2 升级到 Rails 3,同时我们也从 rjs 迁移到 jquery。我们正在采用一种旨在提高视图可重用性的新模式。我将以edit/update为例来说明项目中做AJAX的新方式和旧方式:

A. 旧方式 - 编辑操作模板不会向客户端呈现任何更新特定的 javascript 逻辑。更新模板呈现 html 内容和操作(替换元素)。这与 RJS 方法非常相似,但在 jQuery 中。

优点: 1. AJAX html 内容和执行 DOM 操作的 javascript 代码组织在同一个 .rb 文件中,易于维护。 2. 查看规范可以测试更新AJAX响应中是否渲染了正确的DOM操作js代码。

缺点: 1. 因为html内容和js代码是耦合的,并且在目标页面上假设了一定的DOM结构,在不同的页面上复用比较困难。

B. 新方式 - AJAX 请求的更新操作模板只返回一个 JSON 文档,其中包含转义的 html 内容。操作 DOM 的 js 代码从编辑操作模板呈现并监听 AJAX:success/error 虚拟事件。所以内容和行为是分开的。

优点:

    AJAX html 内容和 javascript(行为)是解耦的,因此可以在不同的页面上对内容进行微调和操作略有不同。

缺点:

    html 内容和 js 代码现在组织在 2 个不同的文件中(编辑动作模板中的 js,更新动作模板中的 html 内容),比以前更难维护了。

    我们无法再轻松地测试视图行为 - 更新模板现在仅呈现 AJAX html 内容,但操作它的代码位于不同的视图中(编辑)。

    由于响应是 JSON 格式,我们不能再使用格式来判断客户端是期望用 JSON 包装的 html 还是只是 JSON API 调用。

    这些是我迄今为止学到的东西,我想知道在这个主题上有更多经验的人是否可以对此有所了解 - 通常哪种方法更好以及如何改进它们。

谢谢!

-小天

【问题讨论】:

【参考方案1】:

jQuery的ajax&rabl生成json

【讨论】:

以上是关于Rails 3 UJS Ajax 模式/策略,哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 - 通过使用 AJAX UJS 的集合中的链接更新表

ajaxSetup 不适用于 Rails / jquery-ujs

如何绑定到表单的 ajax:使用 JQuery/Rails UJS 在 typescript 中取得成功

使用 ujs 手动提交远程表单的 Rails 方式

使用AJAX删除rails项目

带有 Rails UJS 的 jQuery Mobile 在使用 data-method="delete" 的链接上尊重 data-ajax="false"