Сделайте extraParams в прокси привязываемым - решение с 2 переопределениями - PullRequest
1 голос
/ 17 февраля 2020

Конфигурация extraParams прокси НЕ привязана. Единственный стандартный способ привязки данных к запросу магазина - через фильтры. Может показаться, что extraParams является привязываемым, так как используется первое значение. Это работает только один раз, любые изменения связанного значения после этого не регистрируются. Использование удаленных фильтров - это решение:

vehicleliststore: {
    model: 'packagename.model.Vehicle',
    proxy: {
        type: 'ajax',
        url: Ext.getResourcePath('php/overview/vehicle.php', null, 'packagename'),
        reader: AIIC.Global.defaultProxyReader,
    },
    autoLoad: true,
    remoteFilter: true,
    filters:[{
        property: 'personid',
        value: '{personId}'
    }],
}

Это прекрасно работает, пока вы не захотите использовать удаленный фильтр для реальной фильтрации чего-либо. Чтобы преодолеть эту проблему, сделайте привязку extraParams записав 2 переопределения. Один для магазина и один для ajax прокси. Конфигурация loadonextraparamschange является необязательной.

Ext.define('overrides.data.proxy.Ajax', {
    override: 'Ext.data.proxy.Ajax',

    mixins :
    {
        observable : 'Ext.mixin.Observable'
    },

    constructor : function(config){
        // do all the constructor stuff of the parent..
        this.callParent(arguments);
        // now do the extended version constructor stuff...
        this.mixins.observable.constructor.call(this, config);
    },

    updateExtraParams : function(newValue, oldValue){
        // when keys change, fire event 'keyupdates'
        //console.log('updateExtraParams');
        this.fireEvent('extraparamsupdated', oldValue, newValue);
    },

});

И переопределение для хранилища ...

Ext.define('overrides.data.Store', {
    override: 'Ext.data.Store',

    mixins :
    {
        observable : 'Ext.mixin.Observable'
    },
    config: {
        loadonextraparamschange : true,
    },

    constructor : function(config){
        var me = this;

        me.callParent(arguments);
        me.initConfig(config);
        // listen to proxy event 'keyupdated' and then do reload
        me.getProxy().on('extraparamsupdated', this.onExtraParams , me);
    },

    onExtraParams: function(extraParams){
        if( this.getLoadonextraparamschange() )  this.reload();

    }
});

...