@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
79 lines (68 loc) • 2.71 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2009-2023 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
/*eslint-disable max-len */
// Provides the JSON model implementation of a property binding
sap.ui.define(['./PropertyBinding'],
function(PropertyBinding) {
"use strict";
/**
* Creates a new ClientPropertyBinding.
*
* 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.Model#bindProperty Model#bindProperty} on the corresponding model implementation instead.
*
* @param {sap.ui.model.Model} 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, syntax depends on the concrete subclass
* @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 client models.
*
* @alias sap.ui.model.ClientPropertyBinding
* @extends sap.ui.model.PropertyBinding
* @protected
*/
var ClientPropertyBinding = PropertyBinding.extend("sap.ui.model.ClientPropertyBinding", /** @lends sap.ui.model.ClientPropertyBinding.prototype */ {
constructor : function(oModel, sPath, oContext, mParameters){
PropertyBinding.apply(this, arguments);
this.oValue = this._getValue();
}
});
/*
* @see sap.ui.model.PropertyBinding.prototype.getValue
*/
ClientPropertyBinding.prototype.getValue = function(){
return this.oValue;
};
/**
* Returns the current value of the bound target (incl. re-evaluation)
* @return {object} the current value of the bound target
*/
ClientPropertyBinding.prototype._getValue = function(){
var sProperty = this.sPath.substr(this.sPath.lastIndexOf("/") + 1);
if (this.oContext && sProperty == "__name__") {
var aPath = this.oContext.getPath().split("/");
return aPath[aPath.length - 1];
}
return this.oModel.getProperty(this.sPath, this.oContext); // ensure to survive also not set model object
};
/**
* Setter for context.
*
* @param {sap.ui.model.Context} oContext The new context to set
*/
ClientPropertyBinding.prototype.setContext = function(oContext) {
if (this.oContext != oContext) {
sap.ui.getCore().getMessageManager().removeMessages(this.getDataState().getControlMessages(), true);
this.oContext = oContext;
if (this.isRelative()) {
this.checkUpdate();
}
}
};
return ClientPropertyBinding;
});