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

时间:2018-01-23 08:12:16

标签: javascript html extjs extjs4.2

我正在尝试编写一个覆盖,它将在每个模型字段转换函数上调用。我正在尝试确保在没有HTML标记的情况下保存每个字段。如果我将我的代码放在一个转换函数中就可以了。但覆盖看起来似乎永远不会被调用。

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);
}
});

1 个答案:

答案 0 :(得分:1)

您只需更改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;
        };
    }
});

FIDDLE 中,我使用您的代码创建了一个演示。我希望这可以帮助您或指导您解决问题。

代码段

//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()
});