posts - 30, comments - 5, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          ExtJS Record 與 Store 說明

          Posted on 2010-05-04 11:18 無所謂 閱讀(3504) 評論(1)  編輯  收藏 所屬分類: ExtJS

          1、Record

            首先需要明確是,ExtJS中有一個名為Record的類,表格等控件中使用的數據是存放在Record對象中,一個Record可以理解為關系數據表中的一行,也可以稱為記錄。Record對象中即包含了記錄(行中各列)的定義信息(也就是該記錄包含哪些字段,每一個字段的數據類型等),同時又包含了記錄具體的數據信息(也就是各個字段的值)。

            我們來看直接使用Record的代碼:

          Ext.onReady(function(){
                   
          var MyRecord = Ext.data.Record.create([
                       {name: 'title'},
                       {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: '
          int'},
                       {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 
                             ]);
                   
          var r=new MyRecord({
                             title:
          "日志標題",
                             username:
          "easyjf",
                             loginTimes:
          100,
                             loginTime:
          new Date()
                   });       
                   alert(MyRecord.getField(
          "username").mapping);
                   alert(MyRecord.getField(
          "lastLoginTime").type);
                   alert(r.data.username);
                   alert(r.get(
          "loginTimes"));
           });



             首先使用Record的create方法創建一個記錄集MyRecord,MyRecord其實是一個類,該類包含了記錄集的定義信息,可以通過MyRecord來創建包含字段值的Record對象。在上面的代碼中,最后的幾條語句用來輸出記錄集的相關信息,MyRecord.getField("username")可以得到記錄中username列的字段信息,r.get("loginTimes")可以得到記錄loginTimes字段的值,而r.data.username同樣能得到記錄集中username字段的值。
            對Record有了一定的了解,那么要操作記錄集中的數據就非常簡單了,比如r.set(name,value)可以設置記錄中某指定字段的值,r. dirty可以得到當前記錄是否有字段的值被更改過等等。

          2Store

          Store可以理解為數據存儲器,可以理解為客戶端的小型數據表,提供緩存等功能。在ExtJS中,GridPanel、ComboBox、DataView等控件一般直接與Store打交道,直接通過store來獲得控件中需要展現的數據等。一個Store包含多個Record,同時Store又包含了數據來源,數據解析器等相關信息,Store通過調用具體的數據解析器(DataReader)來解析指定類型或格式的數據(DataProxy),并轉換成記錄集的形式保存在Store中,作為其它控件的數據輸入。
            數據存儲器由Ext.data.Store類定義,一個完整的數據存儲器要知道數據源(DataProxy)及數據解析方式(DataReader)才能工作,在Ext.data.Store類中數據源由proxy配置屬性定義、數據解析(讀取)器由reader配置屬性定義,一個較為按部就班創建Store的代碼如下:

          var MyRecord = Ext.data.Record.create([
                       {name: 'title'},
                       {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: 'int'},
                       {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 
                             ]);
                   var dataProxy=new Ext.data.HttpProxy({url:"link.ejf"});
                   var theReader=new Ext.data.JsonReader({
                       totalProperty: "results", 
                       root: "rows",              
                       id: "id"                   
                             },MyRecord);
                   var store=new Ext.data.Store({           
                                       proxy:dataProxy,
                                       reader:theReader
                             });
                   store.load();

            當然,這樣的難免代碼較多,Store中本身提供了一些快捷創建Store的方式,比如上面的示例代碼中可以不用先創建一個HttpProxy,只需要在創建Store的時候指定一個url配置參數,就會自動使用HttpProxy來加載參數。比如,上面的代碼可以簡化成:

           

          var MyRecord = Ext.data.Record.create([
                       {name: 'title'},
                       {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: 'int'},
                       {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 
                             ]);
                   var theReader=new Ext.data.JsonReader({
                       totalProperty: "results", 
                       root: "rows",              
                       id: "id"                   
                             },MyRecord);
                   var store=new Ext.data.Store({
                   url:"link.ejf",
                                       proxy:dataProxy,
                                       reader:theReader
                             });
                   store.load();

            雖然不再需要手動創建HttpProxy了,但是仍然需要創建DataReader等,畢竟還是復雜,ExtJS進一步把這種常用的數據存儲器進行了封裝,在Store類的基礎上提供了SimpleStore、SimpleStore、GroupingStore等,直接使用SimpleStore,則上面的代碼可以進一步簡化成下面的內容:

          var store=new Ext.data.JSonStore({               
                             url:"link.ejf?cmd=list",
                             totalProperty: "results", 
                             root: "rows",
                             fields:['title',   {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: 'int'},
                       {name: 'lastLoginTime', mapping: 'loginTime', type: 'date'} 
                             ]         
                   });
                   store.load();

           

          3DataReader

          DataReader表示數據讀取器,也就是數據解析器,其負責把從服務器或者內存數組、xml文檔中獲得的雜亂信息轉換成ExtJS中的記錄集Record數據對象,并存儲到Store里面的記錄集數組中。
            數據解析器的基類由Ext.data.DataReader定義,其它具體的數據解析器都是該類的子類,ExtJS中提供了讀取二維數組、JSon數據及Xml文檔的三種數據解析器,分別用于把內存中的二級數組、JSON格式的數據及XML文檔信息解析成記錄集。下面簡單的介紹:
            1)ArrayReader
          Ext.data.ArrayReader-數組解析器,用于讀取二維數組中的信息,并轉換成記錄集Record對象。首先看下面的代碼:

          var MyRecord = Ext.data.Record.create([
                       {name: 'title', mapping:1},
                       {name: 'username', mapping:2},
                       {name: 'loginTimes', type:3} 
                             ]);
                   var myReader = new Ext.data.ArrayReader({
                       id: 0           
                   }, MyRecord);

            這里定義的myReader可以讀取下面的二維數組:

          [ [1, '測試', '小王',3], [2, '新年好', 'williamraym',13] ]

            2JsonReader
            Ext.data.JsonReaderJson數據解析器,用于讀取JSON格式的數據信息,并轉換成記錄集Record對象。看下面使用JsonReader的代碼:

          var MyRecord = Ext.data.Record.create([
                       {name: 'title'},
                       {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: 'int'}
                             ]);
                   var myReader = new Ext.data.JsonReader({
                              totalProperty: "results", 
                   root: "rows",       
                    id: "id" 
                   }, MyRecord);

            這里的JsonReader可以解析下面的JSON數據:

          { 'results': 2, 'rows': [
              { id: 1, title: '測試', author: '小王', loginTimes: 3 },
              { id: 2, title: 'Ben', author: 'williamraym', loginTimes:13} ]
          }

            JSonReader還有比較特殊的用法,就是可以把Store中記錄集的配置信息存放直接保存在從服務器端返回的JSON數據中,比如下面的例子:

          var myReader = new Ext.data.JsonReader();

           

            這一個不帶任何參數的myReader,可以處理從服務器端返回的下面JSON數據:

          {
           'metaData': {
              totalProperty: 'results',
              root: 'rows',
              id: 'id',
              fields: [
                 {name: 'title'},
                       {name: 'username', mapping: 'author'},
                   {name: 'loginTimes', type: 'int'} ]
             },
           'results': 2, 'rows': [
              { id: 1, title: '測試', author: '小王', loginTimes: 3 },
              { id: 2, title: '新年好', author: 'williamraym', loginTimes:13}]
          }

            3)XmlReader
            Ext.data.XmlReader-XML文檔數據解析器,用于把XML文檔數據轉換成記錄集Record對象。看下面的代碼:

          var MyRecord = Ext.data.Record.create([
                       {name: 'title'},
                       {name: 'username', mapping: 'author'},
                       {name: 'loginTimes', type: 'int'}
                             ]);
                   var myReader = new Ext.data.XmlReader({
                              totalRecords: "results", 
                   record: "rows",       
                              id: "id" 
                   }, MyRecord);

            上面的myReader能夠解析下面的xml文檔信息:

          <topics>
           <results>2</results>
           <row>
             <id>1</id>
             <title>
          測試</ title >
             <author>小王
          </ author >
           <loginTimes>3</ loginTimes >
           </row>
           <row>
             <id>2</id>
             <title>新年好
          </ title >
             <author> williamraym </ author >
           <loginTimes>13</ loginTimes >
           </row>
          </topics>

          評論

          # re: ExtJS Record 與 Store 說明  回復  更多評論   

          2013-01-23 09:33 by lovingshu
          除了代碼格式和縮進需要調一下,其余的都不錯!
          主站蜘蛛池模板: 乐亭县| 应城市| 桃江县| 永仁县| 修文县| 义马市| 高台县| 屏东市| 长泰县| 长乐市| 清新县| 龙川县| 江津市| 东兴市| 潮安县| 宜黄县| 福清市| 运城市| 天台县| 吉水县| 五家渠市| 调兵山市| 马公市| 潢川县| 抚远县| 韩城市| 永泰县| 乃东县| 正蓝旗| 夹江县| 卓尼县| 宜城市| 敦煌市| 丹东市| 永仁县| 吴堡县| 米脂县| 同德县| 庆元县| 珠海市| 青田县|