src/components/meta/Properties.js
function(fields, options) {
            fields  = this.__resolveFields(fields);
            options = this.__resolveOptions(options);

            var property = fields.shift();

            if (options.check) {
                this.__checkProperty(property, {
                    readable: true,
                    method:  'get',
                    params:   _.toArray(arguments)
                });
            }

            var value = this.__applyGetters(property, this['_' + property]);

            for (var i = 0, ii = fields.length; i < ii; ++i) {

                var field = fields[i];

                if (!(field in value)) {
                    throw new Error('Property "' + [property].concat(fields.slice(0, i+1)).join('.') + '" does not exists!');
                }

                value = this.__applyGetters(property, value[field], fields.slice(0, i+1));
            }

            if (options.emit && this.__checkEmitEvent()) {
                var prop = [property].concat(fields).join('.');

                this.__emitEvent('property.' + prop + '.get',  value);
                this.__emitEvent('property.get', prop, value);
            }

            return value;
        }
function(fields, options) {
            fields  = this.__resolveFields(fields);
            options = this.__resolveOptions(options);

            var property = fields.shift();

            if (options.check) {
                this.__checkProperty(property, {
                    readable: true,
                    method:  'get',
                    params:   _.toArray(arguments)
                });
            }

            var value = this.__applyGetters(property, this['_' + property]);

            for (var i = 0, ii = fields.length; i < ii; ++i) {

                var field = fields[i];

                if (!(field in value)) {
                    throw new Error('Property "' + [property].concat(fields.slice(0, i+1)).join('.') + '" does not exists!');
                }

                value = this.__applyGetters(property, value[field], fields.slice(0, i+1));
            }

            if (options.emit && this.__checkEmitEvent()) {
                var prop = [property].concat(fields).join('.');

                this.__emitEvent('property.' + prop + '.get',  value);
                this.__emitEvent('property.get', prop, value);
            }

            return value;
        }
function ( fields , options ) { fields = this . __resolveFields ( fields ) ; options = this . __resolveOptions ( options ) ; var property = fields . shift ( ) ; if ( options . check ) { this . __checkProperty ( property , { readable : true , method : 'get' , params : _ . toArray ( arguments ) } ) ; } var value = this . __applyGetters ( property , this [ '_' + property ] ) ; for ( var i = 0 , ii = fields . length ; i < ii ; ++ i ) { var field = fields [ i ] ; if ( ! ( field in value ) ) { throw new Error ( 'Property "' + [ property ] . concat ( fields . slice ( 0 , i + 1 ) ) . join ( '.' ) + '" does not exists!' ) ; } value = this . __applyGetters ( property , value [ field ] , fields . slice ( 0 , i + 1 ) ) ; } if ( options . emit && this . __checkEmitEvent ( ) ) { var prop = [ property ] . concat ( fields ) . join ( '.' ) ; this . __emitEvent ( 'property.' + prop + '.get' , value ) ; this . __emitEvent ( 'property.get' , prop , value ) ; } return value ; }
Gets property value

@param {string|array} fields   Property fields
@param {object}       options  Options (emit, check)
@returns {*} Property value

@this {clazz|object}
Gets property value