function _adaptDeepChildObservation(caller, oControl, oAggregation, bObserve) {
		var aChildren = oAggregation.get(oControl) || [], oChild, bRecord;

		if (aChildren && !Array.isArray(aChildren) && !oAggregation.multiple) {
			aChildren = [aChildren];
		}

		for (var i = 0; i < aChildren.length; i++) {
			oChild = aChildren[i];
			if (!(oChild instanceof ManagedObject)) {
				continue;
			}
			bRecord = true;

			if (bObserve) {
				caller._oObserver.observe(oChild, {
					properties: true,
					aggregations: true
				});
			} else {
				caller._oObserver.unobserve(oChild, {
					properties: true,
					aggregations: true
				});
			}

			var mAggregations = oChild.getMetadata().getAllAggregations();

			for (var sKey in mAggregations) {
				_adaptDeepChildObservation(caller, oChild, mAggregations[sKey], bObserve);
			}
		}

		if (bRecord) {
			var sKey = oControl.getId() + "/@" + oAggregation.name;

			if (bObserve) {
				if (!caller._mObservedCount.aggregations[sKey]) {
					caller._mObservedCount.aggregations[sKey] = 0;
				}
				caller._mObservedCount.aggregations[sKey]++;
			} else {
				delete caller._mObservedCount.aggregations[sKey];
			}
		}
	}
/**
	 * Adapt the observation of child controls in order to be able to react when e.g. the value
	 * of a select inside a list changed. Currently the MOM is not updated then
	 *
	 * @param {object} the caller, here the managed object model
	 * @param {control} the control which shall be (un)observed
	 * @param {object} the observed aggregation
	 * @param {boolean} <code>true</code> for observing and <code>false</code> for unobserving
	 *
	 * @private
	 * @ui5-restricted sap.ui.mdc
	 */
Adapt the observation of child controls in order to be able to react when e.g. the value
of a select inside a list changed. Currently the MOM is not updated then

@param {object} the caller, here the managed object model
@param {control} the control which shall be (un)observed
@param {object} the observed aggregation
@param {boolean} true for observing and false for unobserving


Adapt the observation of child controls in order to be able to react when e . g . the value of a select inside a list changed . Currently the MOM is not updated then @param { object } the caller here the managed object model @param { control } the control which shall be ( un ) observed @param { object } the observed aggregation @param { boolean } true for observing and false for unobserving
function _adaptDeepChildObservation(caller, oControl, oAggregation, bObserve) {
		var aChildren = oAggregation.get(oControl) || [], oChild, bRecord;
		if (aChildren && !Array.isArray(aChildren) && !oAggregation.multiple) {
			aChildren = [aChildren];
		}
		for (var i = 0; i < aChildren.length; i++) {
			oChild = aChildren[i];
			if (!(oChild instanceof ManagedObject)) {
				continue;
			}
			bRecord = true;
			if (bObserve) {
				caller._oObserver.observe(oChild, {
					properties: true,
					aggregations: true
				});
			} else {
				caller._oObserver.unobserve(oChild, {
					properties: true,
					aggregations: true
				});
			}
			var mAggregations = oChild.getMetadata().getAllAggregations();
			for (var sKey in mAggregations) {
				_adaptDeepChildObservation(caller, oChild, mAggregations[sKey], bObserve);
			}
		}
		if (bRecord) {
			var sKey = oControl.getId() + "/@" + oAggregation.name;
			if (bObserve) {
				if (!caller._mObservedCount.aggregations[sKey]) {
					caller._mObservedCount.aggregations[sKey] = 0;
				}
				caller._mObservedCount.aggregations[sKey]++;
			} else {
				delete caller._mObservedCount.aggregations[sKey];
			}
		}
	}
function _adaptDeepChildObservation ( caller , oControl , oAggregation , bObserve ) { var aChildren = oAggregation . get ( oControl ) || [ ] , oChild , bRecord ; if ( aChildren && ! Array . isArray ( aChildren ) && ! oAggregation . multiple ) { aChildren = [ aChildren ] ; } for ( var i = 0 ; i < aChildren . length ; i ++ ) { oChild = aChildren [ i ] ; if ( ! ( oChild instanceof ManagedObject ) ) { continue ; } bRecord = true ; if ( bObserve ) { caller . _oObserver . observe ( oChild , { properties : true , aggregations : true } ) ; } else { caller . _oObserver . unobserve ( oChild , { properties : true , aggregations : true } ) ; } var mAggregations = oChild . getMetadata ( ) . getAllAggregations ( ) ; for ( var sKey in mAggregations ) { _adaptDeepChildObservation ( caller , oChild , mAggregations [ sKey ] , bObserve ) ; } } if ( bRecord ) { var sKey = oControl . getId ( ) + "/@" + oAggregation . name ; if ( bObserve ) { if ( ! caller . _mObservedCount . aggregations [ sKey ] ) { caller . _mObservedCount . aggregations [ sKey ] = 0 ; } caller . _mObservedCount . aggregations [ sKey ] ++ ; } else { delete caller . _mObservedCount . aggregations [ sKey ] ; } } }
Adapt the observation of child controls in order to be able to react when e.g.
Adapt the observation of child controls in order to be able to react when e . g .