Extjs изменить магазин

У меня есть привязка data.store, назовем ее store1 на диаграмме. Я хочу создать новый магазин из store1 (я хочу произвести расчеты в store1, например, суммировать некоторые записи), скажем, store2, а затем привязать его к диаграмме. До сих пор любые изменения в store1 отражаются на диаграмме.

Я хочу сохранить это и в store2.

Как я могу добиться чего-то подобного?

Я новичок в ext и прошу лучшего понимания архитектуры.

Спасибо


person Argiropoulos Stavros    schedule 17.07.2011    source источник


Ответы (3)


Создайте прослушиватель для store1, который после загрузки заполняет хранилище локального массива (примеры ext со статическими данными). Например, только store1 - это json, второй store2 - это полностью производные данные.

person hpavc    schedule 17.07.2011

HPAVC подсказал true. См. пример, где метод "transforms" может быть заполнен store2

person tarasnn    schedule 13.01.2015

Я понимаю, что это старый вопрос, но хотел немного лучше задокументировать его для тех, кто найдет этот ответ в будущем.

Будьте осторожны при добавлении прослушивателя загрузки в хранилище. Если вы используете прослушиватели загрузки, вы должны обязательно включить single: true, чтобы он сам удалялся. Если вы не избавитесь от прослушивателя, это станет «утечкой памяти» в вашей программе, потому что каждый раз, когда вызывается хранилище, будет добавляться другой прослушиватель, увеличивая количество элементов, которые запускает прослушиватель загрузки, и увеличивая объем используемой памяти.

Более чистый способ справиться с этим — использовать обратный вызов для события загрузки.

store.getProxy().extraParams = {
WI: Ext.getCmp('transferManagerMain').MenuID,
UID: Ext.getCmp('transferManagerMain').UID,
companykey: obj.$widgetRecord.data.CompanyKey,
transferid: obj.$widgetRecord.data.TransferID
};
store.load({
    callback: function (records, operation, success) {
        var Tier2PayrollWdw = Ext.create('object');
        var responseJson = JSON.parse(operation.getResponse().responseText);
        var warnlinArr = responseJson.warnlines;
        Ext.fireEvent('setDataViewErrWarnLineArr', warnlinArr);
        Tier2PayrollWdw.setWidth(Ext.getBody().getViewSize().width - 300);
        Tier2PayrollWdw.setHeight(Ext.getBody().getViewSize().height - 300);
        Tier2PayrollWdw.setTitle('Data View - ' + 
    obj.$widgetRecord.get('OriginalFileName') + ' Transfer Date: ' + 
    Ext.util.Format.date(obj.$widgetRecord.get('TransferTime'), 'm/d/Y'));
    Tier2PayrollWdw.show();
    }
});

Обратный вызов не продолжает добавлять слушателей.

person aallord    schedule 20.04.2018