我工作的公司最近从 Rails 2 升级到 Rails 3,同时我们也从 rjs 迁移到 jquery。我们正在采用一种旨在提高视图可重用性的新模式。我将以编辑/更新为例来说明项目中做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(behavior) 是解耦的,因此可以在不同的页面上对内容进行稍微不同的调整和操作。
缺点:
html 内容和 js 代码现在组织在 2 个不同的文件中(编辑动作模板中的 js,更新动作模板中的 html 内容),比以前更难维护。
我们不能再轻易地测试视图行为——更新模板现在只呈现 AJAX html 内容,但操作它的代码在不同的视图中(编辑)。
由于响应是 JSON 格式,我们不能再使用格式来判断客户端是期望用 JSON 包装的 html 还是只是 JSON API 调用。
这些是我到目前为止所学到的东西,我想知道是否有人在这个主题上有更多经验可以对此有所了解 - 通常哪种方法更好以及如何改进它们。
谢谢!
-小天