ExtJS: store.load() не загружает данные

Я столкнулся с проблемой в ExtJS 4.2, этот метод store.load() не загружает данные с сервера, а только извлекает json. Мой файл js/itfx/resources/genres.json:

[{"name":"Action & Adventure","code":"ACTION-ADVENTURE-00"},{"name":"African","code":"AFRICAN-00"},{"name":"Anime","code":"ANIME-00"},{"name":"Bollywood","code":"BOLLYWOOD-00"},{"name":"Classics","code":"CLASSICS-00"},{"name":"Comedy","code":"COMEDY-00"},{"name":"Concert Films","code":"CONCERT-FILMS-00"},{"name":"Documentary","code":"DOCUMENTARY-00"},{"name":"Drama","code":"DRAMA-00"},{"name":"Foreign","code":"FOREIGN-00"},{"name":"Holiday","code":"HOLIDAY-00"},{"name":"Horror","code":"HORROR-00"},{"name":"Independent","code":"INDEPENDENT-00"},{"name":"Kids & Family","code":"KIDS-FAMILY-00"},{"name":"Made for TV","code":"MADE-FOR-TV-00"},{"name":"Middle Eastern","code":"MIDDLE-EASTERN-00"},{"name":"Music Documentaries","code":"MUSIC-DOCUMENTARIES-00"},{"name":"Music Feature Film","code":"MUSIC-FEATURE-FILMS-00"},{"name":"Musicals","code":"MUSICALS-00"},{"name":"Regional Indian","code":"REGIONAL-INDIAN-00"},{"name":"Romance","code":"ROMANCE-00"},{"name":"Russian","code":"RUSSIAN-00"},{"name":"Sci-Fi & Fantasy","code":"SCIFI-FANTASY-00"},{"name":"Short Films","code":"SHORT-FILMS-00"},{"name":"Special Interest","code":"SPECIAL-INTEREST-00"},{"name":"Sports","code":"SPORTS-00"},{"name":"Thriller","code":"THRILLER-00"},{"name":"Turkish","code":"TURKISH-00"},{"name":"Urban","code":"URBAN-00"},{"name":"Western","code":"WESTERN-00"}]

Моя модель:

Ext.define('ITFX.model.films.info.FilmGenre', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'name', type: 'string'},
        {name: 'code', type: 'string'}
    ]
});

Мой магазин:

Ext.define('ITFX.store.films.info.FilmGenre', {
    extend: 'Ext.data.Store',

    model: 'ITFX.model.films.info.FilmGenre',

    proxy: {
        type: 'ajax',
        url : 'js/itfx/resources/genres.json',
        reader: {
            type: 'json'
        }
    }
});

Итак, после выполнения кода выше:

var allFilmGenresStore = Ext.create('ITFX.store.films.info.FilmGenre');
allFilmGenresStore.load();

Методы

allFilmGenresStore.getCount(); //0
allFilmGenresStore.getTotalCount(); //0

вернется, что магазин ничего не загрузил Что я делаю не так? заранее спасибо


person Evgeniy Fitsner    schedule 16.08.2013    source источник
comment
Любые ошибки в консоли инструментов разработчика Chrome? Если вы посмотрите на запрос XHR в инструментах разработчика Chrome, вы увидите, что фактический запрос ajax происходит?   -  person bakamike    schedule 16.08.2013
comment
Вы ждете вызовов для завершения данных? Ajax является асинхронным, и вы не можете запустить allFilmGenresStore.getCount() сразу после allFilmGenresStore.load(), поскольку данные могут еще не вернуться с сервера.   -  person Reimius    schedule 16.08.2013


Ответы (2)


Да, спасибо за помощь, причина рута в том, что данные хранилища загружаются асинхронно. Код для загрузки данных должен быть:

allFilmGenresStore.load({ 
    callback : function(records, options, success) { 
        // some custom logik 
    } 
});
person Evgeniy Fitsner    schedule 16.08.2013
comment
Вы также можете добавить слушателя в событие загрузки хранилища, чтобы что-то делать с данными. - person dbrin; 17.08.2013

Вы должны изменить читатель

reader: {
            type: 'json',
            root: 'root'
        }

и отправить json_encode('root' => $data);

Я надеюсь, что это поможет вам

person Alexxander.Gor    schedule 18.06.2014