首页 > 解决方案 > 如何覆盖 EXTJS 中的模型并添加额外的字段?

问题描述

如何在 EXTJS 中覆盖模型?例如,如果我有一个模型定义为:

Ext.define('Mypp.model.Class1', {
    extend: 'Ext.data.Model',

    fields: [{
        name: 'field1',
        type: 'string'
    }],

    getField1: function() {
        return this.data.field1;
    },

    setField1: function(field1) {
        this.set('field1', field1);
    },
});

我怎样才能覆盖它并添加额外的字段```field3`

例如,如何覆盖以下类并添加额外的字段?

Ext.define('Ext.calendar.model.Event', {
    extend: 'Ext.data.Model',

    mixins: ['Ext.calendar.model.EventBase'],

    fields: [{
        name: 'title',
        type: 'string'
    }, {
        name: 'color',
        type: 'string'
    }],

    getColor: function() {
        return this.data.color;
    },

    getTitle: function() {
        return this.data.title;
    },

    setColor: function(color) {
        this.set('color', color);
    },

    setTitle: function(title) {
        this.set('title', title);
    }
});

我试过了

标签: extjsmodeloverriding

解决方案


我不明白你为什么需要这个,但无论如何:

Ext.define('Mypp.model.Class1', {
    extend: 'Ext.data.Model',

    fields: [{
        name: 'field1',
        type: 'string'
    }],

    getField1: function() {
        return this.data.field1;
    },

    setField1: function(value) {
        this.set('field1', value);
    },
});

Ext.define('overrides.model.Class1', {
    override: 'Mypp.model.Class1',

    fields: [{
        name: 'field1',
        type: 'string'
    }, {
        name: 'field2',
        type: 'string'
    }],

    getField2: function() {
        return this.get('field2');
    },

    setField2: function(value) {
        this.set('field2', value);
    }
});

model = new Mypp.model.Class1();
model.setField1('Field1Value');
model.setField2('Field2Value');
console.log(
    model.getField1(),
    model.getField2()
);

推荐阅读