UI5:将控件的简单属性绑定到OData实体的属性

时间:2016-05-10 16:31:12

标签: odata sap sapui5

我有一个OData模型,我成功地用来填充例如。 SAP UI5应用程序中的表:

<Table items="{globalSettings>/APP_GLOBAL_PREFERENCES/}">

等。

实体集APP_GLOBAL_PREFERENCES由每个都具有KEYVALUE属性的实体组成,其中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'
  });
}

我不明白为什么这一步是必要的,我想避免它。 任何人都可以解释为什么这个步骤是必需的,或者有没有人知道如何在没有它的情况下顺利通过?

1 个答案:

答案 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。