EXTJS Зареждане на JSONStore в мрежата след асинхронно получаване

Имам JSON магазин, който бих искал да заредя автоматично в grid.panel. За съжаление, след като завърши асинхронното получаване, нищо не се попълва в мрежата. Firebug показва, че JSON е извлечен успешно.

магазин:

var datasetStore = new Ext.data.JsonStore({
    root: 'rows',
    fields: ['griddap', 'Subset', 'tabledap', 'Make A Graph', 'wms', 'Title', 'Summary', 'Info', 'Background Info', 'RSS', 'Email', 'Institution', 'Dataset ID'],
    proxy: new Ext.data.HttpProxy({
        url: 'http://localhost:8080/proxy.php?u=http://coastwatch.pfeg.noaa.gov/erddap/info/index.json'
        }),
    autoLoad: true
});

мрежа:

var datasetListingGridPanel = new Ext.grid.GridPanel({
        id: 'datasetListingGridPanel',
        preventHeader: true,
        store: datasetStore,
        layout: 'fit',
        viewConfig: {
            forceFit:true,
            fitcontainer:true
        },
        columns: 
        [
            {
                header: 'Dataset Title', 
                dataIndex: 'Title'
            }
        ]
        });

РЕДАКТИРАНЕ - JSON

{
    "table": {
        "columnNames": ["griddap", "Subset", "tabledap", "Make A Graph", "wms", "Title", "Summary", "Info", "Background Info", "RSS", "Email", "Institution", "Dataset ID"],
        "columnTypes": ["String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String"],
        "rows": [
            ["", "", "", "", "", "", "", "", "", "", "", "", ""],
            ["", "", "", "", "", "", "", "", "", "", "", "", ""]
         ]
    }
}

Извадих стойностите, тъй като бяха много дълги.

Някакви идеи какво се обърка?


person gberg927    schedule 23.11.2011    source източник


Отговори (2)


Тъй като използвате JsonStore, е очевидно, че все още използвате ExtJS-3 (а не 4) и следователно следната връзка все още е уместна:

http://www.sencha.com/learn/grid-faq/

Като се има предвид това, гледайки вашия JSON, проблемът е, че коренът, който посочвате, „редове“, не е свойство от най-високо ниво: по-скоро е вложено вътре в свойството „таблица“.

Вижте също: extJS: четене на вложен JSON

Което на свой ред препраща към това: http://docs.sencha.com/ext-js/3-4/#!/api/Ext.data.JsonReader

По-долу са няколко опции:

  1. Превключете кода от страна на сървъра, който връща JSON, за да върне данните с „редове“ като свойство от най-високо ниво
  2. Направете извикване на Ajax за данните, анализирайте ги ръчно, след което ги подайте към вашия магазин
  3. Разширете (или потърсете съществуващо разширение) необходимия ExtJS компонент (JsonReader?), така че да може да работи с данните такива, каквито са, но евентуално можете да посочите свойството "root" като "table.rows"
person Dexygen    schedule 23.11.2011

Това е така, защото натоварването на магазина е асинхронно. По този начин първо се зарежда мрежата и накрая магазините, където са данните, които изисквате за мрежата.

Тази дискусия може да бъде полезна за вас: http://www.sencha.com/forum/showthread.php?119836-Store-asynchronous-loading-and-Form-loading/page2

Използването на функцията за обратно извикване може да бъде решение и за вас:

yourStore.load({  
  callback: function() {  
    //here you can be sure that the store is loaded.  
    }  
});
person Enrique Amador    schedule 11.12.2012