简体   繁体   English

Ext JS 4.2数据字段转换覆盖不起作用

[英]Ext js 4.2 data field convert override not working

I'm trying to write an override which would be called upon each model field convert function. 我正在尝试编写一个重写,它将在每个模型字段转换函数上调用。 I'm trying to make sure each field gets saved without HTML tags. 我试图确保每个字段都保存没有HTML标记。 If I put my code in a single convert function it works. 如果我将代码放在单个转换函数中,它将起作用。 But the override looks like it is never called. 但是,覆盖似乎从未被调用。

Ext.define('hds.override.data.Field', {
override: 'Ext.data.Field',
        constructor: function(config) {
    var me = this;
    this.convert = config.convert || function(v) {
        // Do something with v and return it
        console.log('Process value');
        v = Ext.util.Format.stripTags(Ext.util.Format.stripScripts(v));
        return v;
    };
    this.callParent(arguments);
}
});

You just need to change order of this.callParent(arguments) like below example it will work. 您只需要像下面的示例一样更改this.callParent(arguments)顺序this.callParent(arguments)

//Override data field
Ext.define('hds.override.data.Field', {
    override: 'Ext.data.Field',
    constructor: function (config) {
        var me = this;
        me.callParent(arguments);
        me.convert = config.convert || function (v) {
            // Do something with v and return it
            console.log('Process value');
            v = Ext.util.Format.stripTags(Ext.util.Format.stripScripts(v));
            return v;
        };
    }
});

In this FIDDLE , I have created a demo using your code. 在此FIDDLE中 ,我使用您的代码创建了一个演示。 I hope this will help you or guide you to solve your problem. 我希望这会帮助您或指导您解决问题。

Code Snippet 代码段

//Override data field
Ext.define('hds.override.data.Field', {
    override: 'Ext.data.Field',
    constructor: function (config) {
        var me = this;
        me.callParent(arguments);
        me.convert = config.convert || function (v) {
            // Do something with v and return it
            console.log(`Process value for ${v}`);
            v = Ext.util.Format.stripTags(Ext.util.Format.stripScripts(v));
            return v;
        };
    }
});

Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    fields: ['name', 'email', {
        name: 'phone',
        convert: function (v) {
            return `+91 ${v}`;
        }
    }],
    data: [{
        name: 'Lisa',
        email: 'lisa@simpsons.com',
        phone: '9898989898'
    }, {
        name: 'Bart',
        email: 'bart@simpsons.com',
        phone: '9898989898'
    }, {
        name: 'Homer',
        email: 'homer@simpsons.com',
        phone: '9898989898'
    }, {
        name: 'Marge',
        email: 'marge@simpsons.com',
        phone: '9898989898'
    }]
});

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [{
        text: 'Name',
        flex: 1,
        dataIndex: 'name'
    }, {
        text: 'Email',
        dataIndex: 'email',
        flex: 1
    }, {
        flex: 1,
        text: 'Phone',
        dataIndex: 'phone'
    }],
    renderTo: Ext.getBody()
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM