1. 程式人生 > >ext的Ext.data.JsonStore不自動獲取資料的問題記錄

ext的Ext.data.JsonStore不自動獲取資料的問題記錄

昨天在一個專案當中發現ext的JsonStore在IE的某些狀況下並不能夠自動從後臺的Action獲取json資料,問題原因到現在也沒有查清楚。在本機的開發環境下對外發布服務一切正常,但是部署到公司的單元測試環境後,還是有些主機通過IE無法訪問(用其他的瀏覽器比如火狐很正常)。

這裡需要記錄的就是問題的部分解決,原來通過本機設定JsonStore的autoLoad為true的時候,對外發佈會一部分主機IE訪問不正常,而改成了手動load資料,那麼通過自己的開發環境對外發布服務一切正常。

 typeStore =new Ext.data.JsonStore({
      autoLoad:true,
            url: root+'/issueType.do?method=getTypeList',
         root: 'data',
         fields:['typeId','typeName','typeDesc','displayOrder']
  });

這是原來設定的一個JsonStore ,設定的屬性autoLoad:true 讓這個頁面被載入的時候,自動地通過url為root+'/issueType.do?method=getTypeList' 來從後臺的Action載入資料,通過解析json資料來繪製前臺。也就是這個設定在一部分IE瀏覽器下不能夠正常實現。

具體解決的方法是不使用自動載入,設定為下面的方法

 typeStore =new Ext.data.JsonStore({
      autoLoad:false,
            url: root+'/issueType.do?method=getTypeList',
         root: 'data',
         fields:['typeId','typeName','typeDesc','displayOrder']
  });

然後手動的拉資料來自於另外地方呼叫typeStore.load();將全部的init函式貼出來

function to_init(){
      Ext.QuickTips.init();
     
   typeRecord = Ext.data.Record.create([
          {name: "typeId", type: 'string'},
          {name: "typeName", type:'string'},
          {name: "typeDesc", type:'string'},
          {name: "displayOrder", type:'string'}
     ]);
   typeStore =new Ext.data.JsonStore({
      autoLoad:false,
            url: root+'/issueType.do?method=getTypeList',
         root: 'data',
         fields:['typeId','typeName','typeDesc','displayOrder']
     });
    
     //alert(typeStore.+"-----------");
  
    var colModel = new Ext.grid.ColumnModel([
     new Ext.grid.RowNumberer(),
      {
           header: "問題型別名稱",
      dataIndex:'typeName',
      width: 300,
      sortable: true,
      renderer:"htmlEncode",
      editor:new Ext.form.TextField({
          allowBlank:false
      })
       }, {
           header: "問題型別描述",
      dataIndex:'typeDesc',
      width: 400,
      sortable: true,
      renderer:"htmlEncode",
      editor:new Ext.form.TextField({
      })
       }, {
           header: "顯示順序",
      dataIndex:'displayOrder',
      width: 100,
      sortable: true,
      editor:new Ext.form.NumberField({
          allowBlank:false,
          allowDecimals:false,
          allowNegative:false,
          style:'text-align:left;'
         
      })
       },
       { header: "刪除",dataIndex:'typeName', width: 80, sortable: false,renderer:showDeleteUrl}
    ]);
  

    typeGrid = new Ext.grid.EditorGridPanel({
      id:'typeGrid',
      title:'問題型別管理',
      loadMask: {msg:'<bean:message bundle="common" key="js.message.loading"/>'},
      trackMouseOver:true,
      stripeRows:true,
      frame:true,
      clicksToEdit: 1,     
         store: typeStore,
         cm:colModel,
         iconCls:'icon_grid',
          
         listeners:{//listeners
          afteredit:function(e){//if-5
           if(e.column==3){//if-4
            if(!(e.record.get('displayOrder')!='0'&&e.record.get('displayOrder')=='')){//if-3
             for(var i=0;i<typeStore.getCount();i++){//for-1
              var rec=typeStore.getAt(i);
              if(!(rec.get('displayOrder')!='0'&&rec.get('displayOrder')=='')){//if-2

         //if-1
               if(e.row!=i&&e.record.get('displayOrder')==rec.get('displayOrder')){
                Ext.Msg.alert('<bean:message bundle="common" key="js.message.systemInfo"/>','與第【'+(i+1)+'】行顯示順序重複!');
                if(e.column==3 ){
                 e.record.set('displayOrder','');
                }
                break;
               }//if-1
              }//if-2
             }//for-1
            }//if-3
           }//if-4
          }//if-5
         },
         //listeners
        
   tbar:[{        
         text:'<bean:message bundle="common" key="btn.add"/>',
         iconCls:'icon_add',
         handler:function(){               
         var myNewRecord = new typeRecord({
                         typeId: '',
                   typeName: '',
                   typeDesc:'',
                   displayOrder:''
          });
        typeStore.add(myNewRecord);         
            }
    }]
     });
   
     mainPanel = new Ext.Panel({
          layout:'border',
          frame:true,
          buttons:[
                   {
                     text:'<bean:message bundle="common" key="btn.save"/>',
                    handler:function(){  
                 toSave();
               }
                   },
                   {
                     text:'<bean:message bundle="common" key="btn.reset"/>',
                    handler:function(){  
                         Ext.getCmp('typeGrid').getStore().reload();
               }
                   }
          ],
          buttonAlign:'center',
          items:[{
   region:'center',
   layout:'fit',
   autoScroll:true,
   items:typeGrid
  }]
  });
   
     viewport = new Ext.Viewport({
      layout:'fit', 
      id:'viewport',
      items:mainPanel
     });
    
    typeStore.load();
    
 };