Extjs grid中的checkbox的选中获取数据是否为最新的问题

   在grid的使用中,对于每个column数据的选中问题有两个类型【单选】、【多选】。但是对于弹出层去显示数据详情的时候我们只需要显示一条数据的详细信息,并且这个详细信息是获取自grid的选中column中的,比如我们选择后的修改动作就是这样,但是一次选中多次修改,每次提交到弹出层的record是否是最新的store这个问题就需要考虑了。


单选的情况:

wKiom1MGAITj0wIpAAQJKj09Mjc996.jpg


这样的处理思路是,我们必须单击选中信息才能接下来的操作,所以我们可以提前写好一个Click事件用于获取单击后获取column的数据的方法
    listItemClick: function(obj, record, item, index, e, eOpts)
   方法中的record就存着我们需要的整个column的data了,但是如果update数据后,我们再次点击修改按钮,其实这个时候我们并没有触发Click事件,所以record也就是不存在的,所以我们需要把record先存到一个全局变量中方便下次的获取,但是这样,下次其实获取到的并不一定是最新的数据,所以这个时候我们应该做的是定位你的focus,通过focus判断你现在指的data是store中的那个data,而store一定是每次update后最新的一次,所以现在的问题就转变为获取focus事件column的index了。
   数据的index,我真不知道从何获取,但是你忘了,record的data或许是旧的,但是index是没有新旧之分的,所以我们直接用他原来的index就可以了,所以我们可以这样保持同步后的数据依旧是最新的:Ext.getCmp("list").focus().store.data.items[record.index];

   多选的情况:


wKioL1MGALmyRwnVAAK90O6ijUw243.jpg

   对于多选首先要强调的是多选批量操作是不被允许的,这样我们使用点击取消其中一条的时候,按照上面的思路,因为你点击了所有依旧触发了Click事件,所有你获取到的record并不是页面上展示的你想修改的那条数据,所有上面的方法不适用。或许你会说,前面不是有选择框么,我们可以用选择框选中去获取column的record啊,比如这样Ext.getCmp('id').getSelectModel().getSelection()[0].data,的确这样是可以的,但是在你只选中了而后面多次点击修改按钮你就知道你错了。这样的方法一直获取到的也是和Click一样性质的数据,除非你在点击该column一次并保持选择。
   那对于多选的情况我们怎么保持弹出层获取到的data是最新的呢?
   其实思路和单选的类似,我们还是去判断他的index后去store中取数据。这也告诉我们一个问题,当我们要获取页面grid展示的数据的时候我们劲量去他的Store中拿,因为那样才能保证他的数据是最新的。
   var index = Ext.getCmp('id').getSelectModel().getSelection().concat()[0].index;//获取到数据的index
   var data = Ext.getCmp('id').getSelectModel().getSelection().getStore().data.items[index].data;//获取到Store中的数据




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章