Какая польза от 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)

Другие вопросы по тегам