extjs如何使用代理extraParams将数据从视图传递到存储

时间:2019-04-29 14:25:29

标签: extjs

如何将视图中的参数传递给extjs中的商店?

这是我的商店:

Ext.define('mycomponents.store.mystore', {
    extend: 'Ext.data.Store',
    alias: 'store.levels',
    model: 'mycomponents.model.mymodel',
    storeId: 'levels',
    restful: true,
    autoLoad: true,
    proxy: {
        type: 'ajax',
        headers: {
           'Accept': '*/*',
           'Cache-Control': 'no-cache',
           'Content-Type': 'application/json',
           'Authorization': localStorage.token
        },
        extraParams: {
           sort: 'levelid',
           'filter[active]': true,
           'filter[idparent]': 0
        },
        reader: {
            type: 'json',
            root: 'data',
            successProperty: 'success'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            encode: true,
            root: 'data'
        },
        listeners: {
            exception: function (proxy, response, operation) {
                var error = Ext.decode(response.responseText);
                Ext.MessageBox.show(
                    {
                        title: 'REMOTE EXCEPTION',
                        msg: error.message,
                        icon: Ext.MessageBox.ERROR,
                        buttons: Ext.Msg.OK
                    }
                );
            }
        },
        actionMethods: {
           read: 'GET'
        },
        api: {
           read: 'http://url...',
           create: 'http://url...',
           update: 'http://url...',
           destroy: 'http://url...'
        },
        autoSave: true
    },
    constructor: function (config) {
        this.callParent([config]);
    }
});

我的观点:

var store = Ext.create('mycomponents.store.mystore', {});

Ext.define('mycomponents.view.myview', {
    extend: 'Ext.container.Container',

    id: 'leves',
    alias: 'widget.levels',
    xtype: 'levels',

    items: [
        {
            xtype: 'combobox',
            ...
        }
    ]
    ...
}

我需要从视图发送'filter[idparent]': 1'filter[idparent]': 2或组合框更改中的任何内容。我该如何实现?

1 个答案:

答案 0 :(得分:2)

您需要在组合框中附加on change侦听器,并在商店中使用方法setExtraParam

示例:

Ext.define('mycomponents.view.myview', {
    extend: 'Ext.container.Container',

    id: 'leves',
    alias: 'widget.levels',
    xtype: 'levels',

    items: [
        {
            xtype: 'combobox',
            listeners:{
                change: function (cmp, newV, oldV, opt) {
                    Ext.getStore('levels').getProxy().setExtraParam('filter[idparent]', newV);
                    Ext.getStore('levels').load();
                }
            }
            ...
        }
    ]
    ...
}