海水正藍

          面朝大海,春暖花開
          posts - 145, comments - 29, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          一般我們的前臺代碼Ext.grid.ColumnModel里會這樣寫,以便顯示日期格式:

          //////////////////////////////////////////////////////////////

          Js代碼
          ....  
          {   header:"birthday",

              dataIndex:"birthday"

              ....

              renderer:new Ext.util.Format.dateRenderer("Y-m-d"),  
              .... 

          }

          ....

          //////////////////////////////////////////////////////////////

           

            如果你前臺這樣寫的話,那恭喜你,你的顯示日期那列將不再正確顯示時間,

          而是顯示為"NaN-NaN-NaN",是吧?

            呵呵,問我怎么知道的?因為最開始我也是這么錯的。

            為什么會是錯的呢?

            讓我們來看看Ext.format.dateRenderer的源代碼(開源的東西就是好),

          它的源代碼是這樣的:

           

          Js代碼

          //////////////////////////////////////////////////////////////
          dateRenderer : function(format) {   
              return function(v) {   
                  return Ext.util.Format.date(v, format);、   
              }  

          ////////////////////////////////////////////////////////////// 


             可以看出,我們傳會來的值,被當做日期又被格式化了一次,我們傳回來的是日期嗎?

          以前是,經過昨天后臺代碼的修改,我們傳回來的僅僅是個字符串了,至于為什么要這么改,

          請看昨天寫的“Extjs日期格式問題(一) ”,那咋辦?有的朋友應該已經想到了,既然是字符串,

          那就直接顯示唄,不用renderer了,于是前臺代碼Ext.grid.ColumnModel里就變成了:

           

          Js代碼

          ////////////////////////////////////////////////////////////// 
          ....  
          {header:"birthday",dataIndex:"birthday".......),  
          .... 
          //////////////////////////////////////////////////////////////

           

            可以負責任的告訴你,這樣寫,絕對可以正確顯示了,這樣是不是感覺更簡單了呢?

           

            但是,基于我項目里的要求,這個問題并沒有解決完,因為在這里不是一個簡單的gridpanel,

          而是一個editgridpanel,所以還得定義一個editor,于是有了下面這樣一段代碼:

           

          Js代碼

          //////////////////////////////////////////////////////////////
          ....  
          {header:"birthday",dataIndex:"birthday".......,   
                editor:new Ext.grid.GridEditor(new Ext.form.DateField({format:"Y-m-d"})),  
          ..... 

          //////////////////////////////////////////////////////////////

           
            加了這個DateField控件后,每次可以正常的選擇日期,但是選擇完日期后,

          grid里顯示的格式就又不正確了,這次顯示的內容成了: "Wed Mar 04 1970......",

          這樣的格式一看就是個日期,這樣顯示的原因當然是因為我們沒有寫renderer進行格式化處理的緣故。。。

          說到這里,有人應該已經想到解決辦法了,另外有些人可能就抓狂了,這renderer加了不能正常顯示,

          不加也不能正常顯示,這很矛盾啊。。

            問題往往到了最矛盾的時候,也是到了解決的時候,現在我把解決代碼貼出來,大家一看就明白了。

          多的不說,看代碼:

           

          Js代碼
          //////////////////////////////////////////////////////////////

          renderer:function(value){   
              if(value instanceof Date){   
                  return new Date(value).format("Y-m-d");   
              }else{   
                  return value;   
              }  
          }  
          //////////////////////////////////////////////////////////////

            簡單吧?自己寫renderer就是了。

          原文出自:http://ks2144634.blog.163.com/blog/static/133585503201081544950656/
          主站蜘蛛池模板: 隆化县| 广安市| 五常市| 竹北市| 通海县| 奇台县| 五大连池市| 简阳市| 囊谦县| 桐梓县| 韩城市| 泽库县| 盈江县| 工布江达县| 乌审旗| 中卫市| 南开区| 金寨县| 阜平县| 循化| 藁城市| 金溪县| 南投市| 阿勒泰市| 鹤峰县| 育儿| 宁明县| 高邑县| 会昌县| 博白县| 五家渠市| 铜陵市| 玛曲县| 专栏| 广丰县| 大兴区| 罗田县| 安泽县| 宜川县| 三河市| 淮南市|