什么是 SAP UI5 的 Element binding

简介: 什么是 SAP UI5 的 Element binding

元素绑定(element binding)允许我们将元素绑定到模型数据中的特定对象,这将创建绑定上下文(binding context)并允许控件及其所有子项中的相对绑定。 这在 master-detail 场景中特别有用。

假设我们有以下 JSON 数据:

{
  "company" : {
    "name"  : "Acme Inc."
    "street": "23 Franklin St." 
    "city"  : "Claremont”
    "state" : "New Hampshire”
    "zip” : "03301"
    "revenue": "1833990"
  }
}

element binding 的语法:

<mvc:View
  controllerName="sap.ui.sample.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc">
  <Input id="companyInput"
    binding="{/company}"
    value="{name}"
    tooltip="The name of the company is '{name}'"/> 
</mvc:View>

其中这段代码实际上定义了绑定上下文:

binding="{/company}"

这样 value 属性可以直接绑定到 json 模型 company 中的相对路径字段比如 name 上去。

如果不采用 element binding,我们需要使用绝对路径作为绑定路径,即使用符号 / 开头的绝对路径语法:

<mvc:View
  controllerName="sap.ui.sample.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc">
  <Input id="companyInput"
    value="{/company/name}"
    tooltip="The name of the company is '{/company/name}'}"/> 
</mvc:View>

JavaScript 代码实现 element binding:


var oInput = this.byId("companyInput")
oInput.bindElement("/company");
oInput.bindProperty("value", "name");

element binding 的应用场合

当一个 UI 界面的不同字段,其数据源从逻辑意义上说来自同一数据模型的同一层级时,element binding 特别有用:

<mvc:View
  controllerName="sap.ui.sample.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc">
  <l:VerticalLayout id="vLayout"
    binding="{/company}"
    width="100%">
      <Text text="{name}" />
      <Text text="{city}" />
      <Text text="{county}" />
  </l:VerticalLayout> 
</mvc:View>

如何创建一个新的 binding context

看个例子,我们有如下的 json 文件:

{
  companies : [
    {
      name : "Acme Inc.",
      city: "Belmont",
      state: "NH",
      county: "Belknap",
      revenue : 123214125.34  
    },{
      name : "Beam Hdg.",
      city: "Hancock",
      state: "NH",
      county: "Belknap"
      revenue : 3235235235.23  
    },{
      name : "Carot Ltd.",
      city: "Cheshire",
      state: "NH",
      county: "Sullivan",
      revenue : "Not Disclosed"  
    }]
}

有这样一个 input field:

<mvc:View
  controllerName="sap.ui.sample.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc">
  <Input id="companyInput"
     value="{name}"/> 
</mvc:View>

如何设置绑定上下文:

var oInput = this.byId("companyInput");
oInput.bindElement("/companies/0");

XML 视图已将输入值绑定到模型中的 name 属性。 由于未设置模型中此属性的路径,因此无法 resolve. 要解析绑定,您可以使用 bindElement 方法从指定的相对路径创建一个新的上下文。


若要删除当前绑定上下文,请在输入控件上调用 unbindElement 方法。 通过这样做,所有绑定现在再次相对于父上下文解析。


您还可以将 bindElement 方法与聚合绑定结合使用。 让我们考虑 JSON 数据的以下扩展:

{
  regions: [
    {
      name: "Americas",
      companies : [
      {
        name : "Acme Inc.",
        zip : "03301",
        city: "Belmont",
        county: "Belknap",
        state: "NH",
        revenue : 123214125.34, 
        publ: true
      },
      {
        name : "Beam Hdg.",
        zip : "03451",
        city: "Hancock",
        county: "Sullivan",
        state: "NH",
        revenue : 3235235235.23,
        publ: true
      },
      {
        name : "Carot Ltd.",
        zip : "03251",
        city: "Cheshire",
        county: "Sullivan",
        state: "NH",
        revenue : "Not Disclosed",
        publ: false 
      }]
    },{
      name: "DACH",
      companies : [
      {
        name : "Taubtrueb",
        zip : "89234",
        city: "Ginst",
        county: "Musenhain",
        state: "NRW",
        revenue : 2525, 
        publ: true
      },
      {
        name : "Krawehl",
        zip : "45362",
        city: "Schlonz",
        county: "Humpf",
        state: "BW",
        revenue : 2342525, 
        publ: true
      }]
    }
  ] 
}

如上 json 文件所示,regions 里包含了一个 companies 列表。

<mvc:View
  controllerName="sap.ui.sample.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc">
    <List id=”companyList” items="{companies}">
    <items>
      <StandardListItem
    title="{name}"
    description="{city}"
      />
     </items>
    </List>
</mvc:View>

下面这行语句无法直接被解析,因为这是一个相对路径。

items="{companies}"

我们需要在控制器里使用 element binding:

var oList = this.byId("companyList");
oList.bindElement("/regions/0");

这样,regions 数组里第一个元素,America,包含的所有 companies 就能够正确显示了。

相关文章
|
2月前
|
JavaScript
基于Element UI或Element Plus实现具有倒计时的Message消息提示
本文介绍了如何在Element UI或Element Plus框架中实现具有倒计时功能的消息提示组件,支持多次点击生成多个独立倒计时的消息提示,并提供了详细的实现代码和使用示例。
218 1
基于Element UI或Element Plus实现具有倒计时的Message消息提示
|
2月前
|
JavaScript UED
基于Vue2.0仿Element UI的el-tooltip实现一个气泡框组件,支持多数据类型的显示和内容为空时不显示气泡框
该文章介绍了如何基于Vue2.0仿照Element UI的el-tooltip组件实现一个自定义的气泡框组件,该组件能够根据内容是否为空智能显示或隐藏,支持多种数据类型的显示。
78 0
基于Vue2.0仿Element UI的el-tooltip实现一个气泡框组件,支持多数据类型的显示和内容为空时不显示气泡框
|
2月前
|
JavaScript 开发者
Element UI & Element Plus之改变表格单元格颜色
这篇文章展示了如何在Element UI和Element Plus框架中使用`:cell-style`属性来根据条件改变表格单元格的颜色。
165 0
Element UI & Element Plus之改变表格单元格颜色
|
2月前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
68 0
|
2月前
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
101 0
|
2月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
97 0
|
2月前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
38 0
|
2月前
|
JavaScript 容器
Vue+Element UI
该博客文章介绍了如何在Vue中集成Element UI来构建后台管理系统的左侧菜单,包括使用`el-menu`、`el-submenu`和`el-menu-item`等组件,并通过Vue router动态构建菜单项及其路由设置。
|
3月前
element UI 组件封装--搜索表单(含插槽和内嵌组件)
element UI 组件封装--搜索表单(含插槽和内嵌组件)
62 5
|
3月前
|
JavaScript
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
85 5
下一篇
无影云桌面