处理ExtJs记录修改并刷新后,再次点修改记录不变的问题
2014-01-13 14:43
417 查看
文章地址:/article/1379214.html 转载请注明出处!
在项目开发中遇到这样一个问题,点击Grid中的一条记录并修改,修改完后保存并且刷新表格,后台已保存成功,并且前台grid中的值也已经改变。这时候被修改的记录还处于选中状态,然后再次点修改,发现表单中的值还是原来的值,但是在选择另外一条记录后,再次选择这条记录并修改时发现值已改变。
如图:这是原记录,现在我们在角色说明后面加几个*号,测试
保存后,原来被修改的记录还处于选择状态,然后我点击修改按钮,发现Form中的值还是修改前的值。
注:表单是通过loadRecord的方式加载的值,在每次赋值前都执行了reset(true)方法,所以不是Form缓存的问题
当我们选择另外一条记录,然后再此选择这条记录是值又变成了修改后的值
经过分析我觉得可能是grid中的SelectionModel中的记录并没有改变,所以才会到这这样的情况,正常流程应该是store重新加载后,需要更新SelectionModel中选中的记录。
于是查看Ext.selection.Model的源码,找到为store绑定事件的方法getStoreListeners,方法内容如下。
发现监听了store的load事件,于是猜想问题应该出在onStoreLoad方法上。于是找到这个方法
发现Ext对这个方法的声明是abstract,这个方法是一个空的方法。由此发现Ext的SelectionModel并没有对store重新加载后进行任何的处理。所以我们就自己处理,重写Ext.selection.Model的onStoreLoad方法,在这个方法中更新选中的记录,代码如下
加上上面的代码后问题解决。
在项目开发中遇到这样一个问题,点击Grid中的一条记录并修改,修改完后保存并且刷新表格,后台已保存成功,并且前台grid中的值也已经改变。这时候被修改的记录还处于选中状态,然后再次点修改,发现表单中的值还是原来的值,但是在选择另外一条记录后,再次选择这条记录并修改时发现值已改变。
如图:这是原记录,现在我们在角色说明后面加几个*号,测试
保存后,原来被修改的记录还处于选择状态,然后我点击修改按钮,发现Form中的值还是修改前的值。
注:表单是通过loadRecord的方式加载的值,在每次赋值前都执行了reset(true)方法,所以不是Form缓存的问题
当我们选择另外一条记录,然后再此选择这条记录是值又变成了修改后的值
经过分析我觉得可能是grid中的SelectionModel中的记录并没有改变,所以才会到这这样的情况,正常流程应该是store重新加载后,需要更新SelectionModel中选中的记录。
于是查看Ext.selection.Model的源码,找到为store绑定事件的方法getStoreListeners,方法内容如下。
getStoreListeners: function() { var me = this; return { add: me.onStoreAdd, clear: me.onStoreClear, bulkremove: me.onStoreRemove, update: me.onStoreUpdate, load: me.onStoreLoad, idchanged: me.onModelIdChanged, refresh: me.onStoreRefresh }; },
发现监听了store的load事件,于是猜想问题应该出在onStoreLoad方法上。于是找到这个方法
/** * @abstract * @private */ onStoreLoad: Ext.emptyFn,
发现Ext对这个方法的声明是abstract,这个方法是一个空的方法。由此发现Ext的SelectionModel并没有对store重新加载后进行任何的处理。所以我们就自己处理,重写Ext.selection.Model的onStoreLoad方法,在这个方法中更新选中的记录,代码如下
/** * 处理Grid重新加载过后selectionModel中的记录不更新的问题 * me.selected中存放的是选中的记录的集合 */ Ext.override(Ext.selection.Model,{ onStoreLoad:function(store, records, successful, eOpts){ var me = this, length = me.selected.getCount( ); //如果没有选中的记录,则不需要进行任何的操作 if(length===0)return; //遍历selected并更新其中的记录 me.selected.eachKey(function(key,item){ var model = store.getById(key); //如果获取到了model就更新,否则从selected中移除 if(model){ me.selected.add(model);//add时会覆盖掉原来的值 }else{ me.selected.removeAtKey(key); } }) } });
加上上面的代码后问题解决。
相关文章推荐
- 处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题
- 解决ajax修改数据库后_再次刷新还是原来的数据的问题
- Extjs Grid 拖动排序 (处理拖动后序号刷新、多行拖动序列倒序的问题)
- 三星 S4 手机误删除相片(相册)后的恢复问题,仅记录处理过程,其它Android手机同样适用
- 处理SQL Server 因修改过计算机名无法登陆的问题
- ListView刷新问题小记录
- 【问题记录】ORA-28002/ORA-28000 解决11g 密码过期、密码输错锁住用户问题--修改 default profile
- Win8(NT.6X)修改MTU值过小后蓝屏处理记录
- 重复提交、重复刷新、防止后退的问题以及处理方式
- 重复提交、重复刷新、防止后退的问题以及处理方式分析
- Centos修改DNS重启或者重启network服务后丢失问题处理
- mysql问题处理记录
- 修改JAVA_HOME无效,java版本保持不变的问题解决
- 关于Extjs异步session超时问题处理、jQuery session超时问题处理
- Python问题记录:如何处理中文网页中的多余空格
- SpringMVC在修改response时,Firefox提交的链接执行两次的问题处理
- 常见问题及解决办法 整理之11(处理表中重复记录)
- 解决后台修改数据后在IE8中刷新网页还是之前的页面的问题
- 关于修改extjs 树 前面的图标的问题,extjs 默认的是 文件夹的图标样子
- 记录一次通过性能日志处理线上性能问题的过程