Extjs merge objects

后端 未结 3 545
挽巷
挽巷 2021-02-06 05:08

I have a super class in my application, that defines an object like this:

Ext.define(\'superclass\', {
    myObject: {
        prop1: true,
        prop2: 200,
          


        
相关标签:
3条回答
  • 2021-02-06 05:27

    Both of the provided answers will change the superclass prototype's myObject property as soon as a child class is constructed. This may not be what you want. I question why you are putting an object on the class prototype like this. It's generally not a good idea to do it. But if you really want to, you can do this

    Ext.define('childclass', {
        extend: 'superclass',
    
        // I'm adding an empty object here so that myObject on the
        // prototype does not get overridden.
        myObject: Ext.merge({}, superclass.prototype.myObject, {
            prop3: false,
            prop4: false
        });
    
    });
    
    0 讨论(0)
  • 2021-02-06 05:37

    Extend the object in the constructor (or in initComponent if you extend Ext.Component):

    Ext.define('childclass', {
        extend: 'superclass',
    
        constructor: function() {
            this.myObject = Ext.apply({}, this.myObject, {
                prop3: false,
                prop4: false
            });
            this.callParent(arguments);
        }
    });
    

    Demo.

    0 讨论(0)
  • 2021-02-06 05:53

    @Molecular man's answer is correct, however I would use the merge function.

    Lets say you have this in your first config:

    myObject: {
       prop1: false,
       person: {
           name: "John"
       }
    }
    

    And your second object

    myObject: {
       prop2: false,
       person: {
           surname: "Doe"
       }
    }
    

    Your apply will overwrite person and you'll only have person.surname.

    Into something like this:

    myObject: {
       prop1: false,
       prop2: false,
       person: {
           surname: "Doe"
       }
    }
    

    Merge will merge the two objects.

    Ext.define('childclass', {
        extend: 'superclass',
    
        constructor: function() {
            this.myObject = Ext.merge(this.myObject, {
                prop3: false,
                prop4: false
            });
            this.callParent(arguments);
        }
    });
    

    Note that this will only be needed in the sitation as described in my example, if not you can use Molecular's answer.

    0 讨论(0)
提交回复
热议问题