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中的數據




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