extjs扩展之DynamicTableFormLayout

使用ext的布局,当表单字段很多,有时候需要用到table的布局,仅仅table的布局还不能满足要求,比如说要显示fieldLabel,这时要使用form布局,当然,可以采用table中嵌套的方式来使用form布局,不过这样使用起来代码多,比较不方便,于是到处逛逛,在extjs的论坛中,找到了国外一哥们写的扩展TableFormLayout,使两种布局结合起来用,table中直接放textfield,这样也能满足一般的要求了,但是,有一种需求,比如说,我要动态添加行,这个时候该怎么办呢?
于是来修改TableFormLayout的代码,新增一些方法:


Ext.override(Ext.layout.FormLayout, {
fieldTpl: (function() {
var t = new Ext.Template(
'',
'{1}{4}',
'',
'',
''
);
t.disableFormats = true;
return t.compile();
})()
});

/**
* Table form layout
**/
Ext.layout.TableFormLayout = Ext.extend(Ext.layout.TableLayout, {
setContainer : function(ct){
Ext.layout.TableFormLayout.superclass.setContainer.call(this, ct);
if(ct.labelAlign){
ct.addClass('x-form-label-'+ct.labelAlign);
}

if(ct.hideLabels){
this.labelStyle = "display:none";
this.elementStyle = "padding-left:0;";
this.labelAdjust = 0;
}else{
this.labelSeparator = ct.labelSeparator || this.labelSeparator;
ct.labelWidth = ct.labelWidth || 100;
if(typeof ct.labelWidth == 'number'){
var pad = (typeof ct.labelPad == 'number' ? ct.labelPad : 5);
this.labelAdjust = ct.labelWidth+pad;
this.labelStyle = "width:"+ct.labelWidth+"px;";
this.elementStyle = "padding-left:"+(ct.labelWidth+pad)+'px';
}
if(ct.labelAlign == 'top'){
this.labelStyle = "width:auto;";
this.labelAdjust = 0;
this.elementStyle = "padding-left:0;";
}
}
},

fieldTpl: Ext.layout.FormLayout.prototype.fieldTpl,

renderItem : function(c, position, target) {
if (c && !c.rendered) {
Ext.layout.FormLayout.prototype.renderItem.call(this, c, 0, Ext.get(this.getNextCell(c)));
}
},

getRow : function(index){
        var row = this.table.tBodies[0].childNodes[index];
        if(!row){
            row = this.createRow();
            this.table.tBodies[0].appendChild(row);
        }
        return row;
    },
   
    createCell:function(colspan,rowspan,cellCls){
     var cls = 'x-table-layout-cell';
     var td = document.createElement('td');
     if(colspan){
   td.colSpan = colspan;
  }
  if(rowspan){
   td.rowSpan = colspan;
  }
  if(cellCls){
   cls += ' ' + c.cellCls;
  }
  td.className = cls;
  return td;
    },
   
    createRow:function(){
     var row=document.createElement('tr');
        row.className="x-table-row";
        return row;
    },
   
   insertRow:function(index,items){
var oldTr = Ext.get(this.table.tBodies[0].childNodes[index]);
var newTr = Ext.get(this.createRow());
newTr.insertAfter(oldTr);
if(items&&items.length&&items.length>0){
for(var i=0,j=items.length;i<j;i++){
var t=items[i];
var td = this.createCell(t.colspan,t.rowspan,t.cellCls);
newTr.appendChild(td);
Ext.layout.FormLayout.prototype.renderItem.call(this, t, 0, Ext.get(td));
}
}
}
});
Ext.Container.LAYOUTS['tableform'] = Ext.layout.TableFormLayout;



以上代码能满足动态添加行的需要,当然,这只是抛砖引玉,大家还可以添加动态删除行的功能等等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值