ExtJs3.3的一些使用心得

因为最近学习了一些ExtJs相关的知识,也解决了一些自己想要的效果,在此记录一下。

1.如何在grid里调出一个colorMenu来

2.如何设置grid里某些行可以编辑,某些行不可以编辑,某些行的行颜色不一样,某些行某些列的字体颜色等样式不一样

3.如何控制一些行的checkbox不可以点击,一些可以点击

4.如何设置拖拽的时候,符合条件的才可以拖拽过去,不符合条件的不可以拖拽过去

那么首先看第一个问题:

这也是我第一个弄了好久才弄出来的问题,因为一开始对Extjs不熟悉,所以搞了老半天,其实很简单:

listeners:{
click(_this, The, rowIndex, e){

//new 一个colorMenu
  var colorMenu = new Ext.menu.ColorMenu({
  handler: function(cm, color){//选择colorMenu上的一个颜色的时候
    secondGrid.store.getAt(rowIndex).set(_this.dataIndex,color);//把颜色在该cell上进行修改
    }
  });
colorMenu.showAt(e.getXY());//把colorMenu显示在click时的e的位置上
}}}

接着,我们来看第二个问题:

2.怎么才能让grid的一些行不能编辑呢,其实也是比较简单的。

listeners:{
  //e表示edit event object,包含:grid,record,field,value,row,column,cancel
  beforeedit:function(e){
    //如果该行是indoor是false的,则不可以编辑
    if(secondGrid.store.getAt(e.row).data['editable']==false){
      return false;
    }
}}

这个就是要在grid里面设置listeners,在listeners里面设置beforeedit,然后beforeedit就会根据行的某个条件来return false或者true,false就是不可编辑,true就是可以编辑。

但是这个edit只是对textField有效,对checkColumn,actionColumn这些不是普通的没有效果,对1.写的colorMenu也没有效果

3.还有就是怎么设置某些行的背景颜色不一样呢?

viewConfig:{
  getRowClass:function(record, index, rowParams, store){
    if(record.data['editable']==false){
    return "row-public";
    }
  }
}

这里是用viewConfig里的getRowClass,通过返回class,可以改变行的样式,这个必须是返回css样式里的某个class才行

比如

.row-public{

  background-color:#ff0000;

}

4.说到怎么控制某些行的字体颜色等的不一样,这个我在getRowClass里没有设置成功,我换成在每列根据条件进行renderer来实现。

if(record.data['editable']==false){
  return "<span style='color:"+noEditorColor+";'>"+value+" </span>";
  }
else{
  return "<span style='color:black;'>"+value+" </span>"
}

这个需要注意的就是要返回一段字符串,然后ExtJs会把这段字符串当成HTML语句显示在该cell里

5.怎么控制某些行的checkColumn不能点击,这个呢我也是百度了很多,由各种组合起来给的灵感,下面是该checkcolumn的总体设置,某些不必要的元素可以省略

xtype:'checkcolumn',
id:'public',
header:'Public',
50,
sortable:true,
align:'center',
dataIndex:'public',
listeners: {
click: function(col, grid, rowIndex, e){
if(secondGrid.getStore().getAt(rowIndex).data['editable']== true){
var value = secondGrid.getStore().getAt(rowIndex).get(col.dataIndex);
secondGrid.getStore().getAt(rowIndex).set(col.dataIndex, !value);
}
}
},
renderer:function(value, metaData, record, rowIndex, colIndex, store) {
  metaData.css += ' x-grid3-check-col-td';
  /////////控制某些checkcolumn可以编辑,某些不可以编辑
  if (store.getAt(rowIndex).data['editable']== false&&store.getAt(rowIndex).data['public']==true){
    return "<img src='/modules/projectd/threshold_line/pic/checkNoEdit.gif'>";
  }else if(store.getAt(rowIndex).data['editable']== false&&store.getAt(rowIndex).data['public']==false){
    return "<img src='/modules/projectd/threshold_line/pic/uncheckbox.gif'>";
  }
  else{
    return String.format('<div class="x-grid3-check-col{0}">&#160;</div>', value ? '-on' : '');
  }
}

主要呢是在renderer里实现的根据某些条件,返回一些样式

6.是如何只有一些可以拖拽,一些不可以拖拽

这个我就是在

listeners:{
  render:function(){
    new Ext.dd.DropTarget(this.el, {
    ddGroup : 'secondGridDDGroup',
    notifyDrop : function(ddSource, e, data){
    var DefaultRecords = ddSource.dragData.selections;
    var records=new Array();
    //从selectionModel中挑出editable为true的
    for(var i=0;i<DefaultRecords.length;i++){
      if(DefaultRecords[i].data['editable']==true){
        records.push(DefaultRecords[i]);
      }
    }
    if(records.length>0){
      Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store);
      firstGrid.store.add(records);
    }
      return true
  }
});
}

就是在被拖拽的数据里面把可以拖拽的挑出来。

以上是我这几天主要解决的一些问题,想到更多的再补。

原文地址:https://www.cnblogs.com/aliceQin/p/4807767.html