日期:2014-05-16 浏览次数:20383 次
?
环境: ruby1.8.7, rails 2.2.2
?
Rails中有3种模板渲染方式, ERB, RJS,Builder
?
下面是使用ERB进行模板渲染的程序,当浏览器发送add_to_cart请求时, 页面使用redirect_to进行重定向,此时render接收@cart 变量,开始渲染模板名称为_cart.html.erb的模板(rails规范,这里的_cart 为:partial => "cart"的转换),从而实现ERB模板渲染。
?
?
<dir id="cart"> <%= render(:partial => "cart", :object => @cart) %> </dir>
?
?
这种模板渲染在执行完action后,要进行重定向操纵,真个页面都要刷新, 所以Rails提供了RJS模板渲染技术,使用AJAX来向服务器发送Ajax请求
?
?
<% form_remote_tag :url => {:action => 'add_to_cart', :id => product} do -%> <%= submit_tag "Add To Cart" %> <% end -%>
?
?
此时当发送add_to_cart请求时,就会发起Ajax远程调用,还需要在action中增加如下代码,这样rails就会去调用add_to_cart.js.rjs, 注意rjs模板的名称一定要与上面的:action 同名
?
?
def add_to_cart product = Product.find(params[:id]) @cart = find_cart @cart.add_product(product) #redirect_to_index respond_to do |format| format.js end rescue ActiveRecord::RecordNotFound logger.error("attemp to access invalid product #{params[:id]}") redirect_to_index("Invalid product") end
?
?
?在rjs中指定当前页面中id为cart的元素,将从服务器返回的数据填充进去,即实现了不用刷新界面就讲购物车信息更新的目的
?
?
#add_to_cart.js.rjs
page.replace_html "cart", {:partial => "cart", :object => @cart}
?
?
?
?