UNPKG

@openui5/sap.ui.core

Version:

OpenUI5 Core Library sap.ui.core

76 lines (68 loc) 2.57 kB
/*! * OpenUI5 * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // Provides the JSON model implementation of a property binding sap.ui.define([ 'sap/ui/model/ChangeReason', 'sap/ui/model/ClientPropertyBinding', "sap/base/util/deepEqual" ], function(ChangeReason, ClientPropertyBinding, deepEqual) { "use strict"; /** * Creates a new JSONListBinding. * * This constructor should only be called by subclasses or model implementations, not by application or control code. * Such code should use {@link sap.ui.model.json.JSONModel#bindProperty JSONModel#bindProperty} on the corresponding model instance instead. * * @param {sap.ui.model.json.JSONModel} oModel Model instance that this binding is created for and that it belongs to * @param {string} sPath Binding path to be used for this binding * @param {sap.ui.model.Context} oContext Binding context relative to which a relative binding path will be resolved * @param {object} [mParameters] Map of optional parameters as defined by subclasses; this class does not introduce any own parameters * * @class * Property binding implementation for JSON format. * * @alias sap.ui.model.json.JSONPropertyBinding * @extends sap.ui.model.ClientPropertyBinding * @protected */ var JSONPropertyBinding = ClientPropertyBinding.extend("sap.ui.model.json.JSONPropertyBinding"); /** * @see sap.ui.model.PropertyBinding.prototype.setValue */ JSONPropertyBinding.prototype.setValue = function(oValue){ if (this.bSuspended) { return; } if (!deepEqual(this.oValue, oValue)) { if (this.oModel.setProperty(this.sPath, oValue, this.oContext, true)) { this.oValue = oValue; this.getDataState().setValue(this.oValue); this.oModel.firePropertyChange({reason: ChangeReason.Binding, path: this.sPath, context: this.oContext, value: oValue}); } } }; /** * Check whether this Binding would provide new values and in case it changed, * inform interested parties about this. * * @param {boolean} bForceupdate * */ JSONPropertyBinding.prototype.checkUpdate = function(bForceupdate){ if (this.bSuspended && !bForceupdate) { return; } var oValue = this._getValue(); if (!deepEqual(oValue, this.oValue) || bForceupdate) {// optimize for not firing the events when unneeded this.oValue = oValue; this.getDataState().setValue(this.oValue); this.checkDataState(); this._fireChange({reason: ChangeReason.Change}); } }; return JSONPropertyBinding; });