Какая польза от setBindingContext() и чем отличается от привязки элемента?
В разделе 1.5.2.3 Определение пути привязки демо-набора OpenUI5:
Контекст существует либо для каждой записи агрегации в случае связывания агрегации, либо может быть задан явно для элемента управления с помощью метода setBindingContext.
В разделе 1.5.3.3 "Связывание элементов " демокита OpenUI5:
Привязка элементов позволяет привязывать элементы к определенному объекту в данных модели, что создает контекст привязки и позволяет относительную привязку внутри элемента управления и всех его дочерних элементов.
Мне кажется, что эти две техники на самом деле делают одно и то же. Они оба создают контекст привязки для элемента управления, так что привязки содержащихся в нем элементов управления разрешаются относительно него. Но в чем разница между ними? По какому сценарию кто-нибудь из них вступит в игру?
SetBindingContext не работает в следующем коде:
https://jsbin.com/bigope/edit?html,output
Однако, если я изменю oPanel.setBindingContext("/nameinfo"); в oPanel.bindElement("/nameinfo"); работает, почему?
1 ответ
setBindingContext
требует от вас передать контекст как это:
oPanel.setBindingContext(new sap.ui.model.Context(oModel, "/nameinfo"));
Разница между этими двумя концептуальна. Контекст привязки используется в качестве родительского контекста для всех привязок (для этой модели) в этом элементе управления или его дочерних элементах. Он содержит только ссылку на используемую модель, (часть) пути и необязательный другой родительский контекст. Используется при создании относительных привязок.
bindElement
Метод, с другой стороны, ведет себя как любой другой метод bind *. Это создает привязку (в этом случае ContextBinding
), который позволяет изменять события, привязку данных и т. д. ContextBinding
также служит Binding Context для других привязок, так же как и контекст, добавленный с помощью setBinding Context.
Совсем не смущает, правда;)?
Чтение кода для ManagedObject может помочь вам лучше понять внутреннее устройство. (bindObject = bindElement)