浅谈Extjs radiogroup change事件与items下的checked属性
在使用Extjs制作crud时,由于添加和修改界面的高度相似,使用了相同的row字段。
在角色字段中使用了change监听事件,用于动态的无效化权限分配字段,因为权限分配界面默认没有隐藏,设定了checked:true属性
var row_role = {layout:'column',items:[{columnWidth:.9,layout:'form',items:[{
        xtype:'radiogroup',    fieldLabel:'角色',
        items:[
            {id:'role1',    boxLabel:'管理员',         name:'userDto.user.roleCode',     inputValue:1},
            {id:'role2',    boxLabel:'操作员',         name:'userDto.user.roleCode',     inputValue:2,    checked: true},
            {id:'role3',    boxLabel:'计划发布员',     name:'userDto.user.roleCode',     inputValue:3},
            {id:'role4',    boxLabel:'客户',          name:'userDto.user.roleCode',     inputValue:4}
        ],
        listeners:{
            'change':function(group,checked){
                var fun = Ext.getCmp('fun_role');
                if(checked.inputValue == 2){
                    fun.enable();
                }else{
                    fun.disable();
                }
            }
        }
    }]}]};
    var row_funCode = {layout:'column',items:[{columnWidth:.9,layout:'form',items:[{
        xtype:'checkboxgroup',    fieldLabel:'权限分配',
        columns:4,                id:'fun_role',
        items:[
            {boxLabel:'免签',            id:'userDto.user.funCode1'},
            {boxLabel:'订房',            id:'userDto.user.funCode2'},
            {boxLabel:'订车',            id:'userDto.user.funCode3'},
            {boxLabel:'订餐',            id:'userDto.user.funCode4'},
            {boxLabel:'订导游',            id:'userDto.user.funCode5'},
            {boxLabel:'订门票',            id:'userDto.user.funCode6'},
            {boxLabel:'订火车票',        id:'userDto.user.funCode7'},
            {boxLabel:'额外费用',        id:'userDto.user.funCode8'}
        ]
    }]}]};
经过测试,证明在添加界面中没有任何问题,角色的切换和事件的处理都很正常。
但在处理修改数据时出现了问题。初步的看,业务逻辑完全没有问题,但在业务展示是,应该无效化的字段依旧可以使用。
function inputUserData(selected,form){
        //声明一个新的数据,将从数据源中获取的数据放入其中
        var newRecord = {
            data:{
                //textfiled,下拉菜单的赋值方式
                'userDto.user.username'            :selected[0].get('username'),
                'userDto.user.nickname'            :selected[0].get('nickname'),
                'userDto.user.qq'                :selected[0].get('qq'),
                'userDto.user.company.itemCode'    :selected[0].get('companyCode'),
                'userDto.user.remark'            :selected[0].get('remark'),
            }
        }
        //根据获取到的角色值和默认值比较
        switch(selected[0].get('roleCode')){
            //给相应的单选按钮设置选中状态
            case 1:    var role = Ext.getCmp('role1'); role.setValue(true);
                    //获取权限分配对象,设置无效化
                    var fun = Ext.getCmp('fun_role');
                    fun.disable();
                break;
            case 2:    var role = Ext.getCmp('role2'); role.setValue(true);
                    var fun = Ext.getCmp('fun_role');
                    fun.enable();
                break;
            case 3:    var role = Ext.getCmp('role3'); role.setValue(true);
                    var fun = Ext.getCmp('fun_role');
                    fun.disable();
                break;
            case 4:    var role = Ext.getCmp('role4'); role.setValue(true);
                    var fun = Ext.getCmp('fun_role');
                    fun.disable();
                break;
        }
        //将新的数据刷新到form表单中
        form.getForm().loadRecord(newRecord);
    }                        
经过反复测试后,发现是角色中设置的checked属性造成的,当该字段被隐藏后,执行了change事件
var fun = Ext.getCmp('fun_role'); fun.disable();
change事件监听的checked是手动设置的{id:'role2', boxLabel:'操作员', name:'userDto.user.roleCode', inputValue:2, checked: true}的这条记录
if(checked.inputValue == 2)
所有被无效化的字段,有重新因为change事件而被有效化。修改该问题时:建议将手动设置的checked属性删除即可
浅谈Extjs radiogroup change事件与items下的checked属性的更多相关文章
- 浅谈Android中的事件分发机制
		View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的. 首先介绍一下什么是MotionEvent.所谓MotionEv ... 
- 浅谈Javascript单线程和事件循环
		单线程 Javascript 是单线程的,意味着不会有其他线程来竞争.为什么是单线程呢? 假设 Javascript 是多线程的,有两个线程,分别对同一个元素进行操作: function change ... 
- 浅谈JavaScript中的事件
		引言 Html页面与JavaScript之间的交互是通过事件来完成的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(处理程序)来预订事件,以便事件发生时执行相应的代码.这在传 ... 
- 浅谈C#委托和事件
		委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ... 
- 浅谈javascript的Touch事件
		js的touch事件,一般用于移动端的触屏滑动 代码如下: $(function(){ document.addEventListener("touchmove", _touch, ... 
- 浅谈C#委托和事件【转】
		委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ... 
- 浅谈C#委托和事件(转载)
		委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ... 
- 【解决方案】jquery live的change事件在IE下失效
		$("#spanChildSec select").live("change", function () { //处理内容 ... 
- 浅谈Linux(Centos7.4)环境下NTP服务器的构建
		 一.软件环境 1.操作系统版本 [root@Geeklp201 etc]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core ... 
随机推荐
- CSS里width: auto\9 是什么意思
			color:red;//一般浏览器识别,字体颜色为红color:blue \9;//IE8,IE9及以上版本识别,字体颜色为蓝*color:orange;//IE7识别,字体颜色为橘色_color:b ... 
- Microsoft Web Platform Installer 5.0
			Microsoft Web Platform Installer 5.0 Web 平台安装器 https://www.microsoft.com/web/downloads/platform.aspx 
- css精灵
			○ css 精灵(Sprites)技术利用photoshop将图片整合,然后用background-images,background-position,background-repeat技术,对图片 ... 
- php操作ini配置文件
			有些配置化的数据放到配置文件可以方便管理,比如数据库信息,路由信息,先建立配置文件,test.ini [database_setting] host=127.0.0.1 user=root passw ... 
- 自定义view--实现滑动
			1.重写 onInterceptTouchEvent() 拦截触摸事件 是由父控件向子控件传递 默认返回false 返回true,事件被当前的viewGroup进行处理,Touch事件不向下(子控件) ... 
- excle表格生成网页
			用Dreamweaver可以方便生成和excle表格一样的代码. 复制excle,粘贴 
- windows 服务实例
			参考来源:http://blog.csdn.net/morewindows/article/details/6858216 参考来源: http://hi.baidu.com/tfantasy/ite ... 
- Python’s SQLAlchemy vs Other ORMs[转发 7] 比较结论
			Comparison Between Python ORMs For each Python ORM presented in this article, we are going to list t ... 
- 记一次使用jQuery清空元素
			缘由: 数据量比较大,分页显示,页码是自己写的,动态创建页码,创建元素时会绑定元素的click事件,每次显示五个页码(1,2,3,4,5),点击2—4不换,点5,页码变成3,4,5,6,7. 遇到的问 ... 
- RHEL 6.0服务器安装Oracle 11G R2 最终版
			RHEL6安装Oracle 11g R2最终版 结合网上教程 服务器实战所得 1.使用DVD做yum源新建dvd挂载目录[root@fxq-dp ~]# mkdir /media/iso进入到DVD挂 ... 
