如何在 extraParams 存储 extjs 上设置动态值

How to set dynamic value on extraParams store extjs

嗨,我在 extjs 上将动态值存储到 extraParams 时遇到问题..

我的情况是,当我 console 在这里时,我可以从我的组件中获取价值:

listeners: {
    load: function (store, records, success) {
        console.log(Ext.ComponentQuery.query('combobox[reference=terminal2]')[0])
    }
}

我从那个组件得到了值,但是当我试图将它传递给 extraParam 时,我得到了错误 undefined..

proxy: {
    type: 'ajax',
    url: Config.getApi() + 'api/public/index',
    extraParams: {
        dParams: Ext.ComponentQuery.query('combobox[reference=terminal2]')[0]
    },
},

我收到错误 undefined..

我的完整商店代码

Ext.define('Admin.store.npk.mdm.LayananAlat', {
    extend: 'Ext.data.Store',

    alias: 'store.layananalat',

    requires: [
        'Config'
    ],

    autoLoad: true,

    proxy: {
        type: 'ajax',
        url: Config.getApi() + 'api/public/index',
        actionMethods: {
            read: 'POST'
        },
        paramsAsJson: true,
        timeout: 120000,
        extraParams: {
            dParams: Ext.ComponentQuery.query('combobox[reference=terminal2]')[0]
        },
        headers: {
            'token': Ext.util.Cookies.get('Tokens')
        },
        reader: {
            type: 'json',
            rootProperty: function (obj) {
                return obj.result
            },
            totalProperty: function (obj) {
                return obj.count
            }
        }
    },
    listeners: {
        load: function (store, records, success) {
            console.log(Ext.ComponentQuery.query('combobox[reference=terminal2]')[0])
        }
    }
});

或者是否有另一种方法可以将动态值传递给 extraParams on proxy store in extjs?

您的代理设置将在构建阶段设置,此时您的 UI 很可能未构建,因此您的组件查询无法 return 引用的 UI 元素。

关闭 autoLoad 并从商店定义中删除代理部分。然后在某个地方设置代理,您可以确定 UI 已经构建。例如。在视图的 show/painted 事件中,您可以添加类似

的代码
   const store = Ext.getStore('layananalat');
   store.setProxy({
        type: 'ajax',
        url: Config.getApi() + 'api/public/index',
        actionMethods: {
            read: 'POST'
        },
        paramsAsJson: true,
        timeout: 120000,
        extraParams: {
            dParams: Ext.ComponentQuery.query('combobox[reference=terminal2]')[0]
        },
        headers: {
            'token': Ext.util.Cookies.get('Tokens')
        },
        reader: {
            type: 'json',
            rootProperty: function (obj) {
                return obj.result
            },
            totalProperty: function (obj) {
                return obj.count
            }
   });
   store.load();