JSFiddle - React, Tailwind, and code Playground

by amoiseev

JavaScript

// http://stackoverflow.com/questions/11619648/ext-js-get-modified-records-with-model-validations-error

Ext.define('Person', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'name', type: 'string' },
        { name: 'age', type: 'int', useNull: true }
    ],
    validations: [
        { type: 'presence', field: 'age' }
    ]
});

Ext.define('PersonStore', {
    extend: 'Ext.data.Store',
    model: 'Person',
    data: [
        { name: 'Anton', age: 25 },
        { name: 'Michael', age: 24 },
        { name: 'Sheee', age: 25 },
        { name: 'Ivan', age: 27 }
    ],

    getDirty: function() {
        var i, dirtyModels = [];
        for (i = 0; i < this.getCount(); i++) {
            if (this.getAt(i).dirty || this.phantom === false || ) {
                dirtyModels.push(this.getAt(i));
            }
        }
        return dirtyModels;
    },

    getModified: function() {
        var i, modifiedModels = [];
        for (i = 0; i < this.getCount(); i++) {
            if (this.getAt(i).isModified()) {
                modifiedModels.push(this.getAt(i));
            }
        }
        return modifiedModels;
    }
});

Ext.onReady(function () {
    var store = Ext.create('PersonStore'),
        person;

    var print = function(persons) {
        var i;
        for (i = 0; i < persons.length; i++) {
            person = persons[i];
            person.phantom = false;

            console.log(
                person.get('name') + ' - ' +
                person.get('age') + ' - ' +
                person.isValid());
        }
        console.log('\n');
    };

    // Initial state
    print(store.getRange());
    store.getAt(2).set('age', null);

    store.add({ name: 'Mike', age: null });
    //store.getAt(4).phantom = true;

    //print(store.getModifiedRecords());
    //print(store.getRange());
    
    print(store.getDirty());
    print(store.getNewRecords());
});