我有一个OData模型,我成功地用来填充例如。 SAP UI5应用程序中的表:
<Table items="{globalSettings>/APP_GLOBAL_PREFERENCES/}">
等。
实体集APP_GLOBAL_PREFERENCES
由每个都具有KEY
和VALUE
属性的实体组成,其中KEY
是密钥。
现在,我尝试将text
控件的<Text>
属性绑定到实体的特定实例的属性:
<Text text="The base URL is '{globalSettings>/APP_GLOBAL_PREFERENCES('BASE_URL')/VALUE}'" />
为了实现这一点,我必须按照建议here创建一个元素绑定。就我而言,我是在关联控制器的生命周期方法onBeforeRendering
中完成的:
onBeforeRendering: function () {
this.getView().bindElement({
path: '/APP_GLOBAL_PREFERENCES',
model: 'globalSettings'
});
}
我不明白为什么这一步是必要的,我想避免它。 任何人都可以解释为什么这个步骤是必需的,或者有没有人知道如何在没有它的情况下顺利通过?
答案 0 :(得分:0)
在UI5中,有3种类型的绑定:
聚合绑定可以与聚合一起使用(例如表或列表items
)。从数据的角度来看,这需要一组对象。在这种情况下,您必须配置一个所谓的模板,该模板将针对聚合的每个实例重复进行。在这里,您需要使用相对绑定,因此您没有在绑定路径中包含数组引用本身。
元素绑定用于将对象从模型绑定到控件(视图也是控件!)。如果控件具有任何子元素,则可以使用相对绑定将这些子元素绑定到此对象的任何属性。**
属性绑定是绑定过程的基本部分;每个控件都有更多或更少的属性,您可以使用属性绑定为这些属性指定模型值。
**这意味着,在您的Text
控件中,您必须使用相对绑定,因此只需使用{VALUE}
。但是,请确保如果模型中的APP_GLOBAL_PREFERENCES
指向数组,则必须在bindElement
中选择特定项目(例如:
this.getView().bindElement({
path: '/APP_GLOBAL_PREFERENCES('BASE_URL')',
model: 'globalSettings'
});
)。
修改强> 好的,现在我看到了你的问题!回答你的问题:没有必要。
如果使用this.getView().bindElement(..)
属性,则可以在文本控件中使用相对路径(假设您在此段中包含正确项目的选择)。我的示例基于JSONModel:
this.getView().bindElement({
path: '/APP_GLOBAL_PREFERENCES/0',
model: 'globalSettings'
});
然后你可以在你的视图中执行此操作:
<Text text="{globalSettings>text}" />
如果跳过bindElement(但已将模型分配给视图),则需要使用以下路径:
<Text text="{globalSettings>/APP_GLOBAL_PREFERENCES/0/text}" />
如果要实现一个详细视图,它将所选项的ID作为URL参数获取,建议使用bindElement并选择给定参数;然后在XML视图中,您可以使用相对绑定,而不必关心项目的ID。