会议预约,部门展示代码优化

会议预约代码改进

改进说明:原来的代码,可能想到了点击会正常的触发事件,而点击checkbox时,没有效果。所以呢,想在checkchange进行触发事件,所以只是简单触发了一次itemclick时件。上述代码问题比较多,其一,无论是点击普通的地方还是点击checkbox,其实都是触发了itemclick(理解错了,因为手动设置record的check属性,所以呢,相当于checkOnly)。其二,默认的模式可能是:

//说明,无法通过更改checkOnly来更改属性,
//因为这个会导致树前面增加了一个checkbox。
//显示效果不满足。
selModel: {
    type: 'checkboxmodel',
    checkOnly: true  //只有点击checkbox才会触发改变。
},

只有点击checkbox才会触发改变。导致了点击普通的地方跟点击checkbox的效果不一致,而导致其以为checkbox没有作用,进而继续监听了itemclick事件。其三,就算是没有左右,也不应该手动的触发itemclick事件,而是将itemclick的代码,封装成一个函数,在两个事件中分别调用。而手动触发,会导致事件的循环触发。即A触发了B,而B继而又触发了A。

综上,代码进行了改进。

改进前:

me.on('checkchange',function( node, checked, eOpts){

            me.fireEvent("itemclick",null,node);
        });

me.on("itemclick",function( store, record, item, index, e, eOpts ){
    record.set('checked',record.get("checked") == false);
    me.SetChecked(record,record.get("checked"));
    var groupIdList = [];
    Ext.each(me.getChecked(),function(checkRd){
        var GroupID = checkRd.get("department_id");
        if(undefined != GroupID){
            groupIdList.push(GroupID);
        }
    });
    ShineMessageHub.fireEvent("usergridgroupidlistevent",groupIdList,me);
});

改进后:

//下面的代码会造成循环,性能不好,而且存在点击问题。
//me.on('checkchange',function( node, checked, eOpts){
//          me.fireEvent("itemclick",null,node);
//        });

me.on("itemclick",function( store, record, item, index, e, eOpts ){
    //增加下面一处判断,这样,无论点击checkbox或者 普通的点击,表现一致
    if(e.target.getAttribute('role')!=='button'){
        record.set('checked',record.get("checked") == false);
    }
    me.SetChecked(record,record.get("checked"));
    var groupIdList = [];
    Ext.each(me.getChecked(),function(checkRd){
        var GroupID = checkRd.get("department_id");
        if(undefined != GroupID){
            groupIdList.push(GroupID);
        }
    });
    ShineMessageHub.fireEvent("usergridgroupidlistevent",groupIdList,me);
});