日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...

發(fā)布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

昨天做項目發(fā)現(xiàn)一個問題,當修改了grid中的一條選中記錄,保存并刷新store之后再次點開或者讀取該選中行record發(fā)現(xiàn)還是修改之前的值,但是當鼠標選中其它行并再次回到剛剛修改的記錄之后,點開或者讀取record發(fā)現(xiàn)是修改后的數(shù)據(jù),后臺數(shù)據(jù)在修改保存后已刷新,界面顯示也是最新數(shù)據(jù),但是該條record在不更改已選項的情況下依然是之前的數(shù)據(jù),在網(wǎng)上找到了一個解決辦法并學(xué)習(xí)下別人的思路。

在項目開發(fā)中遇到這樣一個問題,點擊Grid中的一條記錄并修改,修改完后保存并且刷新表格,后臺已保存成功,并且前臺grid中的值也已經(jīng)改變。這時候被修改的記錄還處于選中狀態(tài),然后再次點修改,發(fā)現(xiàn)表單中的值還是原來的值,但是在選擇另外一條記錄后,再次選擇這條記錄并修改時發(fā)現(xiàn)值已改變。

如圖:這是原記錄,現(xiàn)在我們在角色說明后面加幾個*號,測試

保存后,原來被修改的記錄還處于選擇狀態(tài),然后我點擊修改按鈕,發(fā)現(xiàn)Form中的值還是修改前的值。

注:表單是通過loadRecord的方式加載的值,在每次賦值前都執(zhí)行了reset(true)方法,所以不是Form緩存的問題

當我們選擇另外一條記錄,然后再此選擇這條記錄是值又變成了修改后的值

經(jīng)過分析我覺得可能是grid中的SelectionModel中的記錄并沒有改變,所以才會到這這樣的情況,正常流程應(yīng)該是store重新加載后,需要更新SelectionModel中選中的記錄。

于是查看Ext.selection.Model的源碼,找到為store綁定事件的方法getStoreListeners,方法內(nèi)容如下。

getStoreListeners:function(){varme =this;return{add:me.onStoreAdd,clear:me.onStoreClear,bulkremove:me.onStoreRemove,update:me.onStoreUpdate,load:me.onStoreLoad,idchanged:me.onModelIdChanged,refresh:me.onStoreRefresh

};},

發(fā)現(xiàn)監(jiān)聽了store的load事件,于是猜想問題應(yīng)該出在onStoreLoad方法上。于是找到這個方法

/**

* @abstract

* @private

*/onStoreLoad:Ext.emptyFn,

發(fā)現(xiàn)Ext對這個方法的聲明是abstract,這個方法是一個空的方法。由此發(fā)現(xiàn)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);

}

})

}

});

加上上面的代碼后問題解決。

總結(jié)

以上是生活随笔為你收集整理的extjs重新激活grid_处理Extjs的gridpanel修改一条记录并重新加载store之后,已选项model的record并没有改变的问题...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。