前不久入手了《Web 开发敏捷之道》的中文第 4 版,翻看了 Ajax 部分,发现竟然还是使用 .rjs 模板。.rjs 模板在 3.1 版以后已经被移除。另外我又去看了官方的 Rails guide,发现也没有讲述 Ajax 的章节。
也就是说一个新手入门,很可能搞不清楚 Rails 对 Ajax 的支持是如何处理的。所以我想在这写写 Rails 3.2 的 Ajax 向导,让不了解 Ajax 的新手了解 Rails 3.2 的 Ajax 处理,或者了解 Ajax 但不了解 Rails 的人知道 Rails 对其提供了什么支持。
http://chloerei.com/2012/04/21/rails-3-2-ajax-guide/
补充:要写一个向导真是不容易,特别是很难整理出一个足够短、能看懂、同时又能跑起来的例子。这个角度看《Web 开发敏捷之道》还是挺不错的,除了 rjs 部分过时了。所以看完我的向导之后还是不知道怎么写 Ajax 的朋友,不妨用 3.0.5 跟着《Web 开发敏捷之道》第 4 版中文的例子走一遍,之后再去了解为什么 rjs 模板被去掉了。
cool,谢谢分享。like 了~ 另外如果和我一样不太喜欢魔法的话,http://www.alfajango.com/blog/rails-3-remote-links-and-forms/ 和 这个博客里面的http://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/#example 都是不错的阅读资料。
@Rei 文章很简洁,提一个小瑕疵,客户端的 ajax 在 Rails 3.2 里面通常是绑定 ajax:event 来做的,而不需要绑定 form 的 submit 或者 link 的 click 事件,这样可以少去很多代码:
$('new_reply_form').on('ajax:success', function(data){
$("#xxx").html(data)
})
#13 楼 @reducm 我试了一下 coffee.erb,不能正确处理,后来就把文中 coffee 部分内容去掉了。
#14 楼 @quakewang 因为假设的例子是 :remote => true
这个 Rails 的 helper 都不用,所以用了 submit 事件发起 ajax 请求。也许例子二和一混淆了,我再补充一个例子二的 form。
#15 楼 @Rei 最近有需要再 coffee 后面再加个可以处理异步的 javascript 引擎,刚看了一下 Sprockets的库,发现里面其实可以支持在 erb 里嵌 coffee 的
Note: Sprockets processes multiple engine extensions in order from right to left, so you can use multiple engines with a single asset. For example, to have a CoffeeScript asset that is first preprocessed with ERB, use the extension
.js.coffee.erb
.
我在《Web 开发敏捷之道》的英文第 4 版。刚刚接触 Ajax 那部分内容,看的不是很明白,并且运行还有问题,结果还不刷新,真是郁闷!现在正在努力寻找问题所在。到时,搞不定,希望@Rei 能帮一把。啊哈哈