Не удается разрешить c — это не ошибка конструктора

Я пытаюсь создать очень простое приложение «доказательство концепции», используя ExtJS, но мне очень трудно.

Все, что я хочу, это две сетки, получающие свои данные из удаленного файла 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();
    }
});

Клиент.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'
    ]
});

Клиенты.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'
        }
    }
});

Список клиентов.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 через трассировку стека не дала полезной информации.

Что мне не хватает??


Место, где код не работает:

Стек вызовов и точка останова


person Hagay Myr    schedule 10.12.2011    source источник
comment
Можете ли вы сломать ошибку, а затем проследить трассировку стека, чтобы увидеть, откуда взялся c?   -  person James Clark    schedule 10.12.2011
comment
@JamesClark: я добавил к своему вопросу снимок экрана со стеком вызовов и строкой разрыва...   -  person Hagay Myr    schedule 11.12.2011
comment
Он пытается создать экземпляр класса Ext. Я думаю, что ответ будет в методе alias, две записи вниз по трассировке стека. Вероятно, он попытается разрешить какой-то xtype, и это поможет следующему шагу в диагностике.   -  person James Clark    schedule 11.12.2011


Ответы (2)


При использовании загрузчика убедитесь, что вы используете ext-all-dev.js (или ext-dev.js), а не -debug. -dev сообщит об ошибках загрузчика, а -debug — нет. Этот тип проблемы очень сложно отследить по мере роста приложения, но разработчик сразу же сообщит об этом (в вашей консоли).

Я видел этот лакомый кусочек только один раз, но он сэкономил мне дни отладки.

person David Kanarek    schedule 03.02.2012
comment
+1 Большое спасибо! Наконец-то я знаю, для чего нужен файл dev. Вам этого никто не говорит. Лучший совет для отслеживания таких ошибок... - person Knickedi; 03.11.2012
comment
Я не избегу этого комментария, однозначно +1! Важно знать эту разницу, она экономит много времени на отладку! - person ; 25.07.2013
comment
@ david-kanarek ах, я скачал ExtJS 5, у меня есть ext-all, ext-debug ext-rtl, но не ext-dev! ? есть идеи об этой новой версии? - person agpt; 23.07.2014
comment
Извините, я давно не пользовался EXT. Я бы попробовал использовать все различные версии и посмотреть, сообщат ли какие-нибудь об ошибке в консоли. Вы также можете проверить документы Sencha, чтобы узнать, сделали ли они что-нибудь, чтобы упростить поиск этой проблемы. - person David Kanarek; 28.07.2014

Я воспроизвел эту ошибку и обнаружил, что GeoSniffer.store.Clients у вас опечатка в файле client.js. Там GeoSniffer.model.client вместо GeoSniffer.model.Client. Существует также пространство имен GeoSbiffer, используемое в файлах *List.

person Krzysztof    schedule 12.12.2011
comment
Угадай, что он пошутил - person jmjohnson85; 08.07.2020