Связывание, Контекст, Контекстная привязка и BindingContext в ui5
Я обдумывал внутренности и отношения между контекстом, contextbinding и bindingcontext в течение нескольких дней, и я не уверен, есть ли на моей стороне большое заблуждение. Может быть, некоторые из вас могут помочь мне разобраться. Я делаю свои предположения ниже. Сначала я могу сказать, что я всегда работаю с моделями oData.
Это то, что я считаю понимающим для чтения документации:
Контекст - это ссылка на объект данных в модели.
Связывание - это в основном поставщик событий, который (в случае односторонней привязки) наблюдает за состоянием конкретного контекста и испускает события при его изменении/загрузке данных... и поэтому позволяет регистрировать обработчики событий для событий в этом конкретном контексте, Что касается объектов программирования, есть привязки свойств и привязки списков (это правда - или список привязывает все, что когда-либо имеет значение?).
Во всяком случае, я понимаю, что привязка списка является модельной стороной связывания агрегации компонентов, тогда как привязка свойства называется связыванием свойств как с точки зрения компонента, так и с точки зрения модели (запутанной?).
Теперь я не совсем понимаю: привязка контекста new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):
Принимает путь и контекст как параметр. Я предполагаю, что этот oContext - это не совсем контекст, описанный выше, а некоторые метаданные о привязке. это верно? Или это определение thep ath, которое имеет параметр пути относительно?
То, что также кажется странным, - это когда вы хотите создать сам контекст, new sap.ui.model.Contextabov(oModel, sPath, oContext)
снова принимает контекст. Я считаю, что это всего лишь неудачная игра, на которую я смотрю, но я не совсем уверен.
Тогда есть contextbinding и bindingcontext. Я предполагаю, что contextBinding является привязкой к определенному контексту, как описано e. И bindingtexttext - это метаданные в отношении привязки context- или списка.
С точки зрения программирования я не понимаю, почему следующие работы:
- создать привязку списка к контексту через
model.bindList()
передавая только путь. - присоединить обработчик события изменения привязки
- вызов
get_contexts()
при привязке - получать данные в обработчике события изменения (и видеть свойство oData-свойство, заполненное моделью).
и, похоже, нет никакого способа сделать то же самое для привязки свойства, которое я бы предположил, что могу генерировать с помощью model.bindProperty()
. Я могу сгенерировать привязку, но привязка, которую я получаю, кажется, не имеет дескриптора для фактического извлечения данных.
Надеюсь, этот вопрос объясняет мою проблему. Если вы спросите: что вы хотите сделать? Я на самом деле не хочу ничего с этим делать, я просто не совсем понимаю, как это работает. Привязка к элементам управления ui и т.д. Работает отлично, но я бы предпочел понять, что находится под капотом. Я немного читал файлы отладки и блок-тесты, но обсуждать их с вами, ребята, тоже замечательный способ.
Если это неясно, я с радостью добавлю все, что поможет.
Приветствие Мишель
Ответы
Ответ 1
на ваши вопросы ответят ниже. Надеюсь, поможет.
-
Теперь я не совсем понимаю: привязка контекста new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):
Принимает путь и контекст как параметр. Я предполагаю, что этот oContext - это не совсем контекст, описанный выше, а некоторые метаданные о привязке. это верно? Или это определение thep ath, которое имеет параметр пути относительно?
oContext - это контекст, о котором вы говорили выше, если быть точным, это sap.ui.model.Context
.
-
То, что также кажется странным, - это когда вы хотите создать сам контекст, новый sap.ui.model.Context(oModel, sPath, oContext)
снова принимает контекст. Я считаю, что это всего лишь неудачная игра, на которую я смотрю, но я не совсем уверен.
Я предполагаю, что документация здесь смутила вас. Фактически, sap.ui.model.Context принимает только oModel и sPath как параметры. Следующий код - это то, что я получаю от sap-ui-core.js. Вы можете видеть, что часть JSDoc о параметрах фактически несовместима с кодом. Может быть, там какая-то опечатка.
/**
* Constructor for Context class.
*
* @class
* The Context is a pointer to an object in the model data, which is used to
* allow definition of relative bindings, which are resolved relative to the
* defined object.
* Context elements are created either by the ListBinding for each list entry
* or by using createBindingContext.
*
* @param {sap.ui.model.Model} oModel the model
* @param {String} sPath the path
* @param {Object} oContext the context object
* @abstract
* @public
* @name sap.ui.model.Context
*/
var Context = sap.ui.base.Object.extend("sap.ui.model.Context",
/** @lends sap.ui.model.Context.prototype */ {
constructor : function(oModel, sPath){
sap.ui.base.Object.apply(this);
this.oModel = oModel;
this.sPath = sPath;
},
metadata : {
"abstract" : true,
publicMethods : [
"getModel", "getPath", "getProperty", "getObject"
]
}
});
-
С точки зрения программирования я не понимаю, почему следующие работы:
создать привязку списка к контексту через model.bindList(), передавая только путь.
присоединить обработчик события изменения привязки
вызов get_contexts() при привязке
получать данные в обработчике события изменения (и видеть свойство oData-свойство, заполненное моделью).
и, похоже, нет никакого способа сделать то же самое для привязки свойства, которое я бы предположил
Я могу создать через model.bindProperty(). Я могу сгенерировать привязку, но привязка я
получать, кажется, не имеет никакой возможности для фактического получения данных.
На самом деле вы также можете attachChange
к sap.ui.model.PropertyBinding
, и вы можете вызвать getValue() для получения данных.
Ответ 2
Спасибо, Аллен, это действительно помогло. В основном это была путаница в отношении документации, и getValue тоже меня поскользнулся.
Чтобы добавить еще один ответ на вопрос, который неявно включен в заголовок:
context binding: привязка, которую вы установили для заданного пути.
контекст привязки: контекст заданного связывания, то есть при выходе из компонента или какой-либо другой привязки.
Приветствие Мишель