Extjs怎么在复选框没有选中的情况下也能执行行选择事件
1.this.handleMouseDown = Ext.emptyFn;是什么意思?
2.现在情况是我写一个带复选框的表格,然后写个rowclick单击事件,就会出现不管点这一行的任何地方(包括复选框位置)就会选中复选框并且触发rowclick;如果我在var sm = new Ext.grid.CheckboxSelectionModel();后面加一句this.handleMouseDown = Ext.emptyFn;的情况是:在没有选中复选框时,点击这一行复选框右侧其他的地方没有任何效果;如果点击复选框位置就会选中复选框并且触发rowclick事件。这两种情况都不是我想要的,我要的是点击复选框位置时只选中复选框,点击除复选框以外的其他地方触发rowclick事件,互不干扰。
3.你说的继承CheckboxSelectionModel,然后往里面加上那句话,或者那个偷懒的方法。和我现在写的方式有什么区别吗? 展开
如果是3的话,有个:
new Ext.grid.CheckboxSelectionModel({
checkOnly:true//只能通过点击复选框列的复选框才能选中行
});
2的话,我看了下api没有该属性,于是我又下载了源码和extjs3的比对了下,发现3中有这么一段话2里面是没有的:
if(this.checkOnly){
this.handleMouseDown = Ext.emptyFn;
//handleMouseDown这个函数,在RowSelectionModel里,而且2和3的实现是相同的。
}
于是你可以自己写个组件,继承一下CheckboxSelectionModel,在里面把 this.handleMouseDown = Ext.emptyFn;这个加上。(具体写法可以模仿3的CheckboxSelectionModel)
或者一个偷懒方法,就是在你new的那个CheckboxSelectionModel里重写onMouseDown这个函数,在这个函数里,加上 this.handleMouseDown = Ext.emptyFn;这个。(重写的话需要先拷贝源码中对应的onMouseDown方法)
大概这样:
var sm=new Ext.grid.CheckboxSelectionModel({
onMouseDown : function(e, t){
//拷贝源码+你自己的处理
}
});
你去下extjs2和extjs3的源码吧~~~自己试着搞一下~~~
讲的很好,辛苦你还去下载源码给我解答,但我是个新手,对js不是很了解。现在我就想知道怎么解决问题,我有几个疑问:(由于字数比较多,只能放在问题补充里了,麻烦再看一下,谢谢啦!)
var sm = new Ext.grid.CheckboxSelectionModel({
handleMouseDown: Ext.emptyFn
});
这样~就是3里的checkOnly:true这个配置~~~
所实现的是,点击右侧,不会勾选复选框,但点击复选框一定会选择右侧~~~因为这个组件是selectionmodel,作用就是勾选grid的一行记录的~~~而且这个checkbox就是在行内的,点击就是会触发rowclick事件的~~~
如果你非要互不干扰,那你就得自己重写选择器和grid还有view了~~~
你不行换个事件吧用rowdblclick~~~双击某一行~~~