如何更改extJS组合框下拉列表中的数据?

dzhpxtsq  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(177)

如何更改extJS组合框下拉列表中的数据?
我有组合框,我正在尝试加载数据。我想对一些Reg表达式的数据进行分类。
这是我的Stroe代码。

Ext.define("MyApp.store.combo.country", {
    extend: "Ext.data.Store",
    alias:"widget.country",
    //autoLoad:true,
     fields: [{
            name: 'name',type:'string'
        },{
            name: 'key',type:'int'
        }],
    proxy: {
        type: 'ajax',
        method: 'GET',
        url: '/myCountry/getName',
        reader: {
            type: 'json'                
        }
    },
    listeners: {
        beforeload ( store, operation, eOpts ) {
            console.log("combo before load");
        },

        load: function (_this, records, successful, operation, eOpts) {
            var length = records.length;
            var htmlRegex = new RegExp("<(\"[^\"]*\"|'[^']*'|[^'\">])*>");
            for(var i=0; i<length; i++){
                if(htmlRegex.test(records[i].data.name)){
                    records[i].data.name = records[i].data.name.replace( /(<([^>]+)>)/ig, '');
                }
            }
        }
     }
});

现在,当我单击COmbobox时,我看不到下拉列表中的数据是sanatize(Executing without passing RegExp)。这是第二次工作良好。
因此,我的问题是,在这种情况下,我如何更改我的数据。
我已经尝试了加载方法中可以看到的内容。(即使在加载前方法中也没有发生任何事情。)
任何解决方法

dluptydi

dluptydi1#

在我看来,最好的方法是使用计算功能。
这可以确保每次加载或更改存储中的记录时,都会进行正则表达式验证。唯一的缺点是你有另一个领域。

Ext.define("MyApp.store.combo.country", {
    extend: "Ext.data.Store",
    alias: "widget.country",
    fields: [{
        name: 'regexedName',
        type: 'string',
        calculate: function (data) {
            const htmlRegex = new RegExp("<(\"[^\"]*\"|'[^']*'|[^'\">])*>");

            if (htmlRegex.test(data.name)) {
                return data.name.replace(/(<([^>]+)>)/ig, '');
            } else {
                return data.name;
            }
        }
    }, {
        name: 'name', type: 'string'
    }, {
        name: 'key', type: 'int'
    }],
    proxy: {
        type: 'ajax',
        method: 'GET',
        url: '/myCountry/getName',
        reader: {
            type: 'json'
        }
    }
});
ngynwnxp

ngynwnxp2#

您可以在所需字段上定义convertcalculate配置,从而完全避免使用存储侦听器。
主要区别在于,第一个选项可以让您快速转换字段的值,而最后一个选项可以根据其他记录信息的详细说明创建新的属性/字段。

// Example *convert* to change the case of a property
    {
        name: 'firstName',
        type: 'string',
        convert: function (value) {
            return value.toUpperCase();
        }
    }

    // Example *calculate* to create the new property "fullName" based on other properties
    {
        name: 'fullName',
        type: 'string',
        convert: function (data) {
            return data.firstName + ' ' + data.lastName;
        }
    }

相关问题