
我很高兴地宣布我的关于在 非正式会议 上讨论“jQuery on Rails”的提案在 RailsConf 上被接受了!
如果你在 RailsConf,请周四晚上 9:30 在 c125 房间来参加讨论。我将聊聊我在 jQuery on Rails 上的工作,如果有人感兴趣,我应该会有一些代码可以演示。
如果你有兴趣了解其他人如何解决 jQuery 与 Rails 集成的问题,或者只是想分享你做过的很酷的事情,请来参加。在那里见!
更多细节
Yehuda 刚刚在 jQuery on Rails 的工作原理 上发布了更多细节
自从我上次公开讨论 jQuery on Rails 以来,我走了很多路,写了很多代码,并得出了一些结论
- jQuery 和 Unobtrusive JavaScript 与试图在标记中描述行为不兼容,就像 Rails 通过“JavaScript 助手”所做的那样。
- 修复问题的尝试,特别是 UJS for Rails,仍然要求你在视图中包含你的 JS 行为,然后这些行为会在运行时(并根据需要进行缓存)被编组到 JavaScript 文件中。如果你想在多个页面中包含相同的 JS 行为,你需要创建自定义助手并调用它们。
- jQuery 已经是一个完美的非侵入式 JavaScript 机制,直接内置在库中
- jQuery 开发人员面临的最大问题不是简单性(再次强调,你可以在库中免费获得),而是难以在 Rails 视图中包含正确的 jQuery“模块”。
在复杂度中等或更高的应用程序中使用 jQuery 的常见问题是在将所有内容包含在一个 application.js 中(这可能导致较大的应用程序严重减慢速度)和拥有多个模块化文件(这很难根据需要正确包含)之间的权衡。
这对于想要使用 Rails 的 jQuery 用户来说是一个问题,而不是 Rails 用户习惯于 Prototype 助手并希望能够将 jQuery 库作为直接替换的用户。在 jQuery on Rails 的第一个版本中,我将针对想要使用 Rails 的 jQuery 开发人员。换句话说,如果你了解 jQuery 或愿意使用 jQuery,那么 jQuery on Rails 就是为你准备的。
如果你不想学习 jQuery,只想用 Ruby 编程,那么这个版本不适合你。未来版本将包含一些纯 Ruby 开发人员的功能,但我坚持认为,非侵入式 JavaScript 与这种思维模式从根本上不兼容。
撇开这些不谈,jQuery on Rails 实际上做了什么?
首先,它是一个 Rails 插件,你在 application.rhtml 中添加 <%= include_jquery %> 来激活它。当你的服务器启动时,它会解析你所有的 JavaScript 文件,并识别这些文件中的选择器。当 include_jquery 在你的布局中被调用时,它会获取渲染后的 HTML,并使用 Hpricot(它与 jQuery 共享语法)来确定服务器启动时识别出的任何选择器实例是否存在。
包含选择器也存在于你的 HTML 中的 JavaScript 文件将被加载并按预期运行。
简而言之
- 创建你的 JavaScript 文件,像往常一样使用选择器
- 在你的布局中使用 include_jquery
- 完成了