2011-12-10 80 views
3

我正在嘗試使用ExtJS構建一個非常基本的「概念驗證」應用程序,但我很難過。無法解析「c不是構造函數」錯誤

我想要的是兩個網格從遠程JSON文件中獲取數據,但無論我做什麼,我都會繼續獲取主題中的錯誤。

這裏是我的簡單的代碼:

app.js:

Ext.Loader.setConfig({enabled:true}); 

Ext.application({ 
    name: 'GeoSniffer', 
    autoCreateViewport: true, 
    models: ['Location', 'Client'],  
    stores: ['Locations', 'Clients'], 
}); 

Viewport.js

Ext.define('GeoSniffer.view.Viewport', { 
    extend: 'Ext.container.Viewport', 
    layout: 'fit', 

    requires: [ 
     'GeoSniffer.view.ClientsList', 
     'GeoSniffer.view.LocationsList' 
    ], 

    initComponent: function() { 
     this.items = { 
      layout: { 
       type: 'hbox', 
       align: 'stretch' 
      }, 
      items: [{ 
       width: 250, 
       xtype: 'panel', 
       id: 'west-region', 
       layout: { 
        type: 'vbox', 
        align: 'stretch' 
       }, 
       items: [{ 
        xtype: 'locationslist', 
        flex: 1 
       },{ 
        xtype: 'clientslist', 
        flex: 1    
       }] 
      }] 
     }; 

     this.callParent(); 
    } 
}); 

Client.js:

Ext.define('GeoSniffer.model.client', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'ip', 
     'packetsCount', 
     'firstPacketUsec', 
     'latestPacketUsec', 
     'location', 
     'sessionsArr', 
     'currentSession' 
    ] 
}); 

Location.js:

Ext.define('GeoSniffer.model.Location', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'countryCode', 
     'countryName', 
     'region', 
     'city', 
     'postalCode', 
     'latitude', 
     'longitude', 
     'dma_code', 
     'area_code', 
     'metro_code', 
     'packetsCount', 
     'sessionsArr', 
     'currentSession', 
     'clients' 
    ] 
}); 

Clients.js:

Ext.define('GeoSniffer.store.Clients', { 
    extend: 'Ext.data.Store', 
    requires: 'GeoSniffer.model.Client', 
    model: 'GeoSniffer.model.Client', 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: 'data/clients.json', 
     reader: { 
      type: 'json', 
      root: 'clients_list' 
     } 
    } 
}); 

Locations.js:

Ext.define('GeoSniffer.store.Locations', { 
    extend: 'Ext.data.Store', 
    requires: 'GeoSniffer.model.Location', 
    model: 'GeoSniffer.model.Location', 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: 'data/locations.json', 
     reader: { 
      type: 'json', 
      root: 'locations_list' 
     } 
    } 
}); 

個ClientsList.js:

Ext.define('GeoSbiffer.view.ClientsList', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.clientslist', 

    store: 'Clients', 
    title: 'Clients', 
    hideHeaders: true, 

    initComponent: function() { 
     this.columns = [ 
      { 
       dataIndex: 'ip', 
      }, 
      { 
       dataIndex: 'packetsCount',   
      } 

     ]; 

     this.callParent(); 
    } 
}); 

LocationsList.js:

Ext.define('GeoSbiffer.view.LocationsList', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.locationslist', 

    store: 'Locations', 
    title: 'Locations', 
    hideHeaders: true, 

    initComponent: function() { 
     this.columns = [{ 
      dataIndex: 'countryName', 
      flex: 1 
      },{ 
      dataIndex: 'city', 
      flex: 1    
      } 

     ]; 

     this.callParent(); 
    } 
}); 

clients.json

{ 
    "sessions_arr": [ 7, 0, 6, 1, 6, 8, 2, 39, 0, 5, 12, 8], 
    "clients_list": [ 
     { 
     "ip": "82.166.201.153", 
     "packetsCount": 1, 
     "firstPacketUsec": 211474, 
     "latestPacketUsec": 211474, 
     "location": { 
      "countryCode": "IL", 
      "countryName": "Israel", 
      "region": "unknown", 
      "city": "unknown", 
      "latitude": 31.5, 
      "longitude": 34.75, 
      "dma_code": 0, 
      "area_code": 0, 
      "metro_code": 0, 
      "packetsCount": 0, 
      "currentSession": 0, 
      "clients": [] 
     }, 
     "sessionsArr": [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     "currentSession": 1 
     } 
    ], 
    "status": { 
     "executionResult": "OK", 
     "isSnifferActive": false, 
     "servletInfo": "" 
    } 
} 

locations.json

{ 
    "sessions_arr": [ 7, 0, 6, 1, 6, 8, 2, 39, 0, 5, 12, 8], 
    "locations_list": [ 
     { 
     "countryCode": "US", 
     "countryName": "United States", 
     "region": "CA", 
     "city": "Palo Alto", 
     "postalCode": "94304", 
     "latitude": 37.376205, 
     "longitude": -122.1826, 
     "dma_code": 807, 
     "area_code": 650, 
     "metro_code": 807, 
     "packetsCount": 2, 
     "sessionsArr": [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     "currentSession": 0, 
     "clients": [ 
      { 
      "ip": "69.171.242.14", 
      "packetsCount": 2, 
      "firstPacketUsec": 368942, 
      "latestPacketUsec": 369060, 
      "sessionsArr": [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
      "currentSession": 0 
      } 
     ] 
     } 
    ], 
    "status": { 
     "executionResult": "OK", 
     "isSnifferActive": false, 
     "servletInfo": "" 
    } 
} 

試圖通過堆棧跟蹤與Firebug調試沒有提供有用的信息。

我在想什麼?


地點的代碼失敗:

Call stack and breakpoint place

+0

你可以打破這個錯誤,然後按照堆棧跟蹤看看'c'從哪裏來? –

+0

@JamesClark:我在我的問題中添加了調用堆棧和中斷線的屏幕快照... –

+0

它試圖實例化一個Ext類。我認爲答案將在'alias'方法中,堆棧跟蹤下的兩個條目。它可能會試圖解決一些xtype在那裏,這將有助於下一步的診斷。 –

回答

1

我reporoduced這個錯誤,我已經發現了GeoSniffer.store.Clientsclient.js文件,因爲你有錯字。有GeoSniffer.model.client而不是GeoSniffer.model.Client。 *列表文件中使用的名稱空間也有GeoSbiffer

18

在使用裝載機,確保您有ext-all-dev.js(或ext-dev.js)運行-debug-dev會報告加載器錯誤,但-debug不會。這種類型的問題是隨着應用程序的增長而追查的,但開發人員會立即報告它(在您的控制檯中)。

我只看到這個提示一次,但它節省了我幾天的調試。

+1

+1非常感謝!最後,我知道什麼是開發文件。沒有人告訴你。追蹤這類錯誤的最佳提示... – Knickedi

+0

我不會迴避這個評論,絕對+1!瞭解這種差異非常重要,它可以節省大量的調試時間! –

+0

@ david-kanarek啊,我下載了ExtJS 5,我得到了ext-all,ext-debug ext-rtl但不是ext-dev! ?關於這個新版本的任何想法? – agpt

相關問題