Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Как правильно сделать Ext.data.reader.Xml? (https://javascript.ru/forum/extjs/53609-kak-pravilno-sdelat-ext-data-reader-xml.html)

Risa 10.02.2015 22:18

Как правильно сделать Ext.data.reader.Xml?
 
var reader = new Ext.data.reader.Xml({
            record: 'USERS'
        }, rows);

reader.readRecords(xml);


В последней строке если без model выдаёт ошибку. model заранее не знаю. Как сделать, чтобы ошибки не было?

siber-biber 11.02.2015 06:32

http://docs-origin.sencha.com/extjs/...ml-method-read

есть возможность указать recordCreator (дефолтный пытается вызвать конструктор модели) который будет делать то что вам нужно без создания модели.

Risa 11.02.2015 17:49

Похоже, что я не понимаю чего-то глобального. У меня есть запрос к бд. Бд возвращает xml. Мне нужно поместить его в store. В extjs3 это делалось так:
store = new Ext.data.SimpleStore({ fields: [], data: [] });
var reader = new Ext.data.XmlReader({
            record: 'USERS'
        }, rows);
store.loadRecords(reader.readRecords(xml);

В extjs5 какой-то иной принцип и я что-то упускаю. Что мне сделать, чтобы данные загружались в стор? Я написала recordCreator просто с return null, но readRecords падает. Подскажите, пожалуйста.

siber-biber 11.02.2015 20:49

так или иначе стор не может существовать без модели. даже если вы определяете fields вместо model неявно создается модель.

вы уверены что у вас абсолютно динамический набор данных и вы не можете описать его моделью?

не тот ли у вас случай когда есть модель с широким множеством полей, а в зависимости от запроса вам приходит то или иное их подмножество?

ну ок ..даже если у вас нет предопределенного "широкого" списка полей, можно изобрести чтото типа этого:
var reader = new Ext.data.XmlReader(...);

var store, fields;

var records = reader.readRecords(xml, {
    recordCreator : function (data) {
        // здесь судя по доке уже извлечены данные записи, они идут первым агрументом - data
        // вот тут и создавайте новый стор скормив ему fields (или model) сформированный на основе data

        // если первая прочтенная запись - создаем новый стор, с новым списком полей
        if (!fields) {
            fields = Ext.Object.getKeys(data);
            store  = new Ext.data.Store({
                fields : fields
            });
        }

        return new store.model(data);
    }
});

if (store) store.loadRecords(records);

Risa 12.02.2015 17:11

Спасибо! Нашла переменную с полями, делаю нормальную модель и всё работает.


Часовой пояс GMT +3, время: 05:49.