Как извлечь данные из data.store в массив? - PullRequest
2 голосов
/ 03 января 2011

вот мой код xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<investors>
    <investor name="Active"/>
    <investor name="Aggressive"/>
    <investor name="Conservative"/>
    <investor name="Day Trader"/>
    <investor name="Very Active"/>
</investors>    
<events>
    <event period="3 Month Expiry"/>
    <event period="LEAPS"/>
    <event period="Monthlies"/>
    <event period="Monthly Expiries"/>
    <event period="Weeklies"/>
</events>
<prices>
    <price rate="$0.5"/>
    <price rate="$0.05"/>
    <price rate="$1"/>
    <price rate="$22"/>
    <price rate="$100.34"/>
</prices>   
</root>

вот мой код:

    Ext.onReady(function(){
                     var hi= [],hello = [], hey = [];
      Ext.getBody().mask(true, '<div class="demos-loading">Loading&hellip;</div>');  
    var tsstore = new Ext.data.Store({    
        url: 'xmlformat.xml',
        autoLoad: true,
        reader: new Ext.data.XmlReader({
               record: 'investor'
           }, [{name: 'name', mapping: '@name'}])
    });

   var evstore = new Ext.data.Store({    
        url: 'xmlformat.xml',
        autoLoad: true,
        reader: new Ext.data.XmlReader({
               record: 'event'
           }, [{name: 'Eve', mapping: '@period'}])
    });

   var prstore = new Ext.data.Store({    
        url: 'xmlformat.xml',
        autoLoad: true,
        reader: new Ext.data.XmlReader({
               record: 'price'
           }, [{name: 'Pri', mapping: '@rate'}])
    });
    var tsgrid = new Ext.grid.GridPanel({
        store: tsstore,
        columns: [{header: "Trading Style", dataIndex: 'name', sortable: true}],
        renderTo:'example-grid',
        width:540,
        height:200
    });
    var evgrid = new Ext.grid.GridPanel({
        store: evstore,
        columns: [{header: "Events", dataIndex: 'Eve', sortable: true}],
        renderTo:'example-gridone',
        width:540,
        height:200
    });
    var prgrid = new Ext.grid.GridPanel({
        store: prstore,
        columns: [{header: "Price", dataIndex: 'Pri', sortable: true}],
        renderTo:'example-gridtwo',
        width:540,
        height:200
    });



hello.push(tsstore.getRange());


});

данные, которые хранятся в "prstore", я хочу скопировать их в массив.

я хочу вывод что-то вроде:

hello = {"$0.5","$0.05","$1","$22","$100.34"}

но это не работает для меня пожалуйста помоги спасибо

1 Ответ

5 голосов
/ 03 января 2011

getRange () должен это сделать.Убедитесь, что буква "R" написана заглавными буквами.

Предполагая, что это просто опечатка в вашем вопросе, если getRange () не возвращает массив записей, вероятно, ваше хранилище не загружает записи должным образом.Вы уверены, что ваш магазин загружает записи правильно?Используйте Firebug для проверки хранилища после загрузки.

EDIT Похоже, вы запускаете getRange () до того, как хранилище завершит загрузку данных.Вы загружаете хранилище при создании (autoLoad: true), но затем вы сразу же запускаете getRange () (пока XMLHttpRequest все еще ожидает в фоновом режиме!).

Вам нужно будет прослушатьсобытие магазина load, и есть обработчик для манипулирования данными.

EDIT2 Это работает:

Ext.onReady(function(){
        console.log('hi');
        var prstore = new Ext.data.Store({
                url: 'xmlformat.xml',
                autoLoad: true,
                reader: new Ext.data.XmlReader({
                        record: 'price'
                    }, [{name: 'Pri', mapping: '@rate'}])
            });

        prstore.on('load',function(store,records,opts){                    
                console.log(store.getRange());
            });


    });

Вы должны увидеть массивExt.data.Record объекты в вашей консоли Firebug.

...