text: /**
   * @private
   * Custom reader for property grid data
   */
  Ext.define('Ext.grid.property.Reader', {
      extend: 'Ext.data.reader.Reader',
  
      successProperty: null,
      totalProperty: null,
      messageProperty: null,
  
      read: function(dataObject) {
          return this.readRecords(dataObject);
      },
  
      readRecords: function(dataObject) {
          var Model = this.getModel(),
              result = {
                  records: [],
                  success: true
              }, val, propName;
  
          for (propName in dataObject) {
              if (dataObject.hasOwnProperty(propName)) {
                  val = dataObject[propName];
                  if (this.isEditableValue(val)) {
                      result.records.push(new Model({
                          name: propName,
                          value: val
                      }));
                  }
              }
          }
          result.total = result.count = result.records.length;
          return new Ext.data.ResultSet(result);
      },
  
      // @private
      isEditableValue: function(val){
          return Ext.isPrimitive(val) || Ext.isDate(val) || val === null;
      }
  });