在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