ExtJs4 如何在循环中创建动态函数

ExtJs4 How do I create a dynamic function in a loop

本文关键字:创建 动态 函数 循环 ExtJs4      更新时间:2023-09-26

我在 Ext 4.2.1 中有一个 MVC 应用程序,我正在使用重新配置创建一个动态网格。它运行良好,但我坚持如何使用 Ext.ux.grid.FiltersFeature 向网格添加过滤器。我看到的所有示例都是硬编码的。

在我的情况下,在用户做出选择之前,我的商店和网格列都不知道。然后,我使用以下函数在 for 循环中动态构建它:

    onBuildGrid: function() {
        var store = this.getStore('Keys');
        var grid = this.getIndexGrid();
        var rvabrep = this.getStore('Rvabreps');
        var columnModel = [];
        var fields = [];
        var triggerFn = function() {
            this.setValue('');
            var store = this.up('tablepanel').store;
            store.clearFilter();
        };
        for (i = 0; i < store.data.items.length; i++) {
        dataIndex = store.data.items[i].data.IDX;
        text = store.data.items[i].data.IDXDESC;
        columnModel.push({
            text: text,
            dataIndex: dataIndex,
        });
        fields.push({
            name: dataIndex
        });
    }
    rvabrep.model.setFields(fields);
    grid.reconfigure(rvabrep, columnModel);

在 push 函数中,我需要添加以下代码,但无法弄清楚如何在函数内为 keyup 侦听器获取变量。OnTriggerClick 函数有效,但由于它是静态的,因此很容易创建变量。

我想我可以对 keyup 功能使用相同的技术,如果我能弄清楚如何做到这一点。

我需要一个JavaScript天才来拯救!! 谢谢!

       items: {
            xtype: 'trigger',
            triggerCls: 'x-form-clear-trigger', 
            onTriggerClick: triggerFn
            flex : 1,
            margin: 2,
            enableKeyEvents: true,
            listeners: {
                keyup: function() {
                    var store = this.up('tablepanel').store;
                    store.clearFilter();
                    if (this.value) {
                        store.filter({
                            //property needs to be the variable "dataindex"
                            property      : ?this_needs_to_be_a variable?
                            value         : this.value,
                            anyMatch      : false,
                            caseSensitive : false
                        });
                    }
                },
                buffer: 500
            }
        }

你能做这样的事情而不是让它成为一个变量吗?

this.up("gridcolumn").dataIndex;