Extjs列表詳細(xì)信息窗口新建后自動加載解決方法
更新時間:2010年04月02日 19:03:55 作者:
有時候我們在新建列表中的一項(xiàng)后需要進(jìn)入立刻進(jìn)入詳細(xì)信息的編輯頁面,為了使得操作簡便,一般設(shè)定自動導(dǎo)向。
在Extjs中,在當(dāng)前頁面的grid頁新建了一行數(shù)據(jù)后,通過表單形式進(jìn)入詳細(xì)頁面的編輯,此時,為了能讓頁面自動打開詳細(xì)頁面編輯,我花了三個小時,終于找到了在Extjs下最合適的方案,結(jié)果卻只有三句話,我想,這可能也是很多Extjs愛好者們想要知道或者已經(jīng)知道的,為此,將其與大家分享,只求為extjs群體貢獻(xiàn)自己的一些想法。
列表在創(chuàng)建后,一般會有一個提示,現(xiàn)在我把我最開始的幾個思路與大家講講,想直接看結(jié)果的可以跳到最后一套方案~
方案1(放棄). 在新建數(shù)據(jù)后,向createform方法傳送一個id值。這可能是普通搞web的大蝦們最先想到的方法,通過傳參給一個detail頁,然后detail根據(jù)id再到庫中查找相應(yīng)的數(shù)據(jù),顯示在頁面上??墒?,經(jīng)過調(diào)查,發(fā)現(xiàn)頁面是通過當(dāng)前頁面的子窗口的方式來顯示的,而子窗口的數(shù)據(jù)是通過grid中的每行數(shù)據(jù)來傳入的,如果要想顯示二級頁,首先要在grid中讀取出一條數(shù)據(jù),將整體作為一條record傳值才可。而添加數(shù)據(jù)后,本身就是要更新列表的,還不如直接讀取列表中的最新一條數(shù)據(jù),直接傳入,恩, 這就想到了第二套方案~
方案2(成功). 在數(shù)據(jù)創(chuàng)建并更新列表后,設(shè)定列表中的第一項(xiàng)(因?yàn)楦鶕?jù)創(chuàng)建時間排序了的)為選中狀態(tài),調(diào)用onEdit方法,相當(dāng)于點(diǎn)擊了grid中的第一行數(shù)據(jù)并點(diǎn)編輯按鈕的效果(ps:我是不是很有才呀)。好了,在save數(shù)據(jù)的方法后面,調(diào)用grid.selModel.selectRow(0),然后grid.onEdit()(自己定義的編輯方法,通過grid.getSelectionModel().getSelected()取出已選的行,并將參數(shù)傳遞給form),要注意了,這里直接選中的話,是選的列表更新前的第一條(不是我們想要的更新后的第一條哦)~~因?yàn)閟tore的load是異步加載的,哈哈,所以這里呢,要把這兩個方法放到setTimeout函數(shù)里面,像這樣:
setTimeout(function(){
Ext.getCmp("gridPanel").sm.selectRow(0);
Ext.getCmp("gridPanel").onEdit();
},300);
設(shè)定一下延遲,然后再執(zhí)行選擇和編輯方法就行啦。有沒有發(fā)現(xiàn),這里我用的是getCmp,而不是this.grid?因?yàn)閟etTimeout在js中的作用域是全局的,所以如果在這里用了局部變量,js將會報錯“未定義的對象或者方法”。可是,用的時候又發(fā)現(xiàn)一個問題,這個延遲時間感覺有點(diǎn)長了,而且,有延遲讓人感覺老是不爽,可不可以不用這個函數(shù)就搞定呢?于是乎,終極方案即將出爐啦!這是我冥思苦想無果但是無意中發(fā)現(xiàn)的方法哦,嘿嘿,有那么丁點(diǎn)投機(jī)取巧的感覺,大家不要笑我哦,哈哈~
我也是新手,剛學(xué)Extjs沒多久,而且js也不那么熟,估計擱熟手那,這些小問題都是雞毛蒜皮不當(dāng)回事的,可是我想到這個后感覺還是挺有成就感的,高手直接略過,就別聽我啰嗦了,呵呵~
方案3(最佳). 在Extjs的message窗口的回調(diào)函數(shù)中選擇列表并打開詳細(xì)。這就是我的最佳方案。因?yàn)槲野l(fā)現(xiàn)Ext對Ext.Msg.alert()方法提供了四個參數(shù),分別是title,msg,fn,scope(見參考博文)其中,fn就是回調(diào)函數(shù)塊的內(nèi)容,在點(diǎn)擊按鈕后將調(diào)用該函數(shù),我把上面兩句代碼放在回調(diào)函數(shù)里,就解決了延遲加載和用戶體驗(yàn)的兩大問題,真是兩全其美,何樂而不為呢?
Ext.Msg.alert("提示信息", "新建成功,請輸入詳細(xì)信息!", function() {
this.grid.sm.selectRow(0);
this.grid.onEdit();
}, this);
雖然看起來代碼沒幾行,可是卻消耗了我不少腦細(xì)胞啊,為了想出這個方案,試驗(yàn)并調(diào)試了幾十次,大家如果覺得有用,別忘頂貼哦~
解決問題的過程中,參考了以下博文:
ExtJS Ext.MessageBox.alert()彈出對話框詳解
列表在創(chuàng)建后,一般會有一個提示,現(xiàn)在我把我最開始的幾個思路與大家講講,想直接看結(jié)果的可以跳到最后一套方案~
方案1(放棄). 在新建數(shù)據(jù)后,向createform方法傳送一個id值。這可能是普通搞web的大蝦們最先想到的方法,通過傳參給一個detail頁,然后detail根據(jù)id再到庫中查找相應(yīng)的數(shù)據(jù),顯示在頁面上??墒?,經(jīng)過調(diào)查,發(fā)現(xiàn)頁面是通過當(dāng)前頁面的子窗口的方式來顯示的,而子窗口的數(shù)據(jù)是通過grid中的每行數(shù)據(jù)來傳入的,如果要想顯示二級頁,首先要在grid中讀取出一條數(shù)據(jù),將整體作為一條record傳值才可。而添加數(shù)據(jù)后,本身就是要更新列表的,還不如直接讀取列表中的最新一條數(shù)據(jù),直接傳入,恩, 這就想到了第二套方案~
方案2(成功). 在數(shù)據(jù)創(chuàng)建并更新列表后,設(shè)定列表中的第一項(xiàng)(因?yàn)楦鶕?jù)創(chuàng)建時間排序了的)為選中狀態(tài),調(diào)用onEdit方法,相當(dāng)于點(diǎn)擊了grid中的第一行數(shù)據(jù)并點(diǎn)編輯按鈕的效果(ps:我是不是很有才呀)。好了,在save數(shù)據(jù)的方法后面,調(diào)用grid.selModel.selectRow(0),然后grid.onEdit()(自己定義的編輯方法,通過grid.getSelectionModel().getSelected()取出已選的行,并將參數(shù)傳遞給form),要注意了,這里直接選中的話,是選的列表更新前的第一條(不是我們想要的更新后的第一條哦)~~因?yàn)閟tore的load是異步加載的,哈哈,所以這里呢,要把這兩個方法放到setTimeout函數(shù)里面,像這樣:
復(fù)制代碼 代碼如下:
setTimeout(function(){
Ext.getCmp("gridPanel").sm.selectRow(0);
Ext.getCmp("gridPanel").onEdit();
},300);
設(shè)定一下延遲,然后再執(zhí)行選擇和編輯方法就行啦。有沒有發(fā)現(xiàn),這里我用的是getCmp,而不是this.grid?因?yàn)閟etTimeout在js中的作用域是全局的,所以如果在這里用了局部變量,js將會報錯“未定義的對象或者方法”。可是,用的時候又發(fā)現(xiàn)一個問題,這個延遲時間感覺有點(diǎn)長了,而且,有延遲讓人感覺老是不爽,可不可以不用這個函數(shù)就搞定呢?于是乎,終極方案即將出爐啦!這是我冥思苦想無果但是無意中發(fā)現(xiàn)的方法哦,嘿嘿,有那么丁點(diǎn)投機(jī)取巧的感覺,大家不要笑我哦,哈哈~
我也是新手,剛學(xué)Extjs沒多久,而且js也不那么熟,估計擱熟手那,這些小問題都是雞毛蒜皮不當(dāng)回事的,可是我想到這個后感覺還是挺有成就感的,高手直接略過,就別聽我啰嗦了,呵呵~
方案3(最佳). 在Extjs的message窗口的回調(diào)函數(shù)中選擇列表并打開詳細(xì)。這就是我的最佳方案。因?yàn)槲野l(fā)現(xiàn)Ext對Ext.Msg.alert()方法提供了四個參數(shù),分別是title,msg,fn,scope(見參考博文)其中,fn就是回調(diào)函數(shù)塊的內(nèi)容,在點(diǎn)擊按鈕后將調(diào)用該函數(shù),我把上面兩句代碼放在回調(diào)函數(shù)里,就解決了延遲加載和用戶體驗(yàn)的兩大問題,真是兩全其美,何樂而不為呢?
復(fù)制代碼 代碼如下:
Ext.Msg.alert("提示信息", "新建成功,請輸入詳細(xì)信息!", function() {
this.grid.sm.selectRow(0);
this.grid.onEdit();
}, this);
雖然看起來代碼沒幾行,可是卻消耗了我不少腦細(xì)胞啊,為了想出這個方案,試驗(yàn)并調(diào)試了幾十次,大家如果覺得有用,別忘頂貼哦~
解決問題的過程中,參考了以下博文:
ExtJS Ext.MessageBox.alert()彈出對話框詳解
相關(guān)文章
Extjs EditorGridPanel中ComboBox列的顯示問題
EditorGridPanel中嵌入ComboBox通常不會正常顯示ComboBox的store中本想顯示字段,而是顯示的EditorGridPanel中 store的dataindex指定的字段內(nèi)容。2011-07-07ExtJs默認(rèn)的字體大小改變的幾種方法(自己整理)
本文列出網(wǎng)上收集的幾種方法,希望對大家有用,并且做了下瀏覽器兼容,感興趣的朋友可以參考下哈2013-04-04關(guān)于extjs4如何獲取grid修改后的數(shù)據(jù)的問題
如何獲取grid修改后的數(shù)據(jù)問題,下面是API的描述??梢垣@取各種值,感興趣的朋友可以參考下2013-08-08Extjs優(yōu)化(二)Form表單提交通用實(shí)現(xiàn)
本文就將演示下一個實(shí)例使用該代碼只需要13行代碼 原始需要25-30行代碼搞定,感興趣的朋友可以參考下哈,希望可以幫助到你2013-04-04Extjs學(xué)習(xí)筆記之二 初識Extjs之Form
form恐怕是Web開發(fā)中最常用的控件了,Extjs對普通的html form進(jìn)行了一些封裝,使其具有基本的外觀和一些簡便的和服務(wù)器進(jìn)行通信的方法。2010-01-01Extjs學(xué)習(xí)筆記之八 繼承和事件基礎(chǔ)
只有有了事件,頁面才能真正的“活”起來。Extjs的事件也是經(jīng)過良好封裝的,對于事件的處理都由Ext.uitl.Observable類提供接口。2010-01-01解決Extjs4中form表單提交后無法進(jìn)入success函數(shù)問題
form表單提交后無法進(jìn)入success函數(shù)的問題,很是常見,下面有個不錯的解決方法,感興趣的朋友可以參考下2013-11-11