ruby on rails 使用 rails ajax render partial html, 替换view render,提高效率

  在rails中,页面使用render,不仅可以使代码变的漂亮,也可以使代码变的更加灵活,灵活加载各种template,但是如果使用太多的render,会使页面loading时间变长,用户体验度变差,而且render时候,处理的seed data 数量级过大,也会恨影响页面响应时间。

   这里,我使用了ajax,异步处理的方式,controllers 使用render partial 加载template,从而view层 减少render的使用,在不改变template的情况下,提高view 效率

   

   具体代码:

 View
   before:
     %td =render :partial => "template01", :locals => { :data01=> data01, :type=> "Errors" }

   after:
     %td= image_tag '/icons/comment.png',:id=>"errors_#{view.id}",:alt=> "Detail", :data=>view.tenant_id,:title=>  "Detail" 

JS 
   $('[id^=errors_],[id^=warnings_],[id^=imports_]').bind("click", function(){ 
      commons_ajax($(this));
    })      
   
    function commons_ajax(id){
      var row_id_split = $(id).attr('id').split("_");
      var id_index = row_id_split[row_id_split.length-1];
      var type = row_id_split[0];
      var tenant_id = $(id).attr('data')  
      var $dialog = $('<div class="dialog"><img src="/icons/ajax-loader.gif"/></div>').dialog({
          width: 1000,
          height: 700,
          modal: true,
          title: "Details",
          show: {effect: 'blind',
                 duration: 250
          },
          open:function(){    
            $(this).children("img").css("display", "block");
          },
          hide: {effect: 'blind', duration: 250},
          close: function(ev, ui) {
            $(this).remove(); 
            $(this).children("img").css("display", "none");
          }
      });     
      $.ajax({
          async: true,
          type: 'GET',
          data: { "view_id" : id_index ,"tenant_id":tenant_id,"type":type},
          url: "/quality_views/ajax_common",
          context: $(this),
          success: function (r) { 
            $('div.dialog').html($(r).html());
          },
          dataType: "html"
      });              
    } 
  
Controller
   def ajax_common
    if params[:type] == "errors"
      @data01= getTest01(params[:view_id],params[:tenant_id]) 
      respond_to do |format|
        format.html  { render :partial => 'template01', :locals => { :data01 =>@data01, :type=> "Errors"}}
      end      
    elsif params[:type] == "warnings"
      @data02 = getTest02(params[:view_id],params[:tenant_id]) 
      respond_to do |format|
        format.html  { render :partial => 'template02', :locals => {:data02 => @data02, :type=> "Warnings"}}
      end   
    else
      @data03= QualityView.find_by_id(params[:view_id])
      respond_to do |format|
        format.html  { render :partial => 'template03', :locals => { :data03 => @data03}}
      end       
    end
  end




QQ:346600357
邮箱:oldlock1988@163.com
Eric

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值