首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合绑定:如何在已经具有聚合绑定的控件中放置不同的聚合绑定

聚合绑定:如何在已经具有聚合绑定的控件中放置不同的聚合绑定
EN

Stack Overflow用户
提问于 2017-12-28 12:54:42
回答 1查看 1K关注 0票数 0

我的模型中有以下数据:

代码语言:javascript
复制
{
  vertexTable: [
    {
      "NAME": "Tethys",
      "TYPE":"titan",
      "RESIDENCE":"Othrys"
    },
    {
      "NAME": "Oceanus",
      "TYPE": "titan",
      "RESIDENCE": "Othrys"
    }
  ],
  vertexAttributes: [
    {
      "COLUMN_NAME": "NAME",
      "DATA_TYPE_NAME": "VARCHAR"
    },
    {
      "COLUMN_NAME": "TYPE",
      "DATA_TYPE_NAME": "VARCHAR"
    },
    {
      "COLUMN_NAME": "RESIDENCE",
      "DATA_TYPE_NAME": "VARCHAR"
    }
  ]
}

我希望在我的视图中显示这些数据,以便有一个来自vertexAttributes/COLUMN_NAME的标签,并且每个标签都有一个相关的下拉/复选框。

  • 名称标签的vertexTable/NAME
  • 类型标签的vertexTable/TYPE,以及
  • 居住标签的vertexTable/RESIDENCE

我考虑使用一个表单控件,它具有聚合绑定到formElements="{/vertexattributes}",然后每个表单元素从vertexAttributes绑定到"{COLUMN_NAME}"。但是现在,我想将Select绑定到vertexTable,然后将项绑定到NAMETYPERESIDENCE

下面是我在视图中尝试过的代码:

代码语言:javascript
复制
<f:form>
  <f:FormContainer formElements="{/vertexAttributes}">
    <f:FormElement label="{COLUMN_NAME}">
      <List id="values" items="{path: 'VALUES', templateShareable: false}">
        <StandardListItem title="{value}"></StandardListItem>
      </List>
    </f:FormElement>
  </f:FormContainer>
</f:form>

我不得不使用templateShareable,因为我得到了一个错误。不完全确定是什么。

另外,我使用的是一个列表来显示完整的值,而不是选择/下拉。

这是正确的方法,还是有更好的方法?我遇到了工厂功能,但我无法实现它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 16:44:47

下面是一个有用的例子:

代码语言:javascript
复制
sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/ui/model/json/JSONModel",
  "sap/ui/layout/form/FormElement",
  "sap/m/Label",
  "sap/m/Select",
  "sap/ui/core/Item",
], (JSONModel, FormElement, Label, Select, Item) => sap.ui.xmlview({

  viewContent: `<mvc:View
    xmlns:mvc="sap.ui.core.mvc"
    xmlns:form="sap.ui.layout.form"
    xmlns="sap.m"
    controllerName="demo.MyController"
  >
    <form:Form editable="true">
      <form:layout>
        <form:ResponsiveGridLayout/>
      </form:layout>
      <form:FormContainer
        formElements="{
          path: '/vertexAttributes',
          factory: '.createFormElement'
        }"
      />
    </form:Form>
  </mvc:View>`,

  controller: sap.ui.controller("demo.MyController", {
    createFormElement: function(id, context) {
      const columnName = context.getProperty("COLUMN_NAME");
      return new FormElement(id).setLabel(new Label({
        text: columnName,
      })).addField(new Select().bindItems({
        path: "/vertexTable",
        template: new Item().bindProperty("text", columnName),
      }));
    },
  }),

}).setModel(new JSONModel({
  vertexTable: [{
      "NAME": "Tethys",
      "TYPE": "Titan1",
      "RESIDENCE": "Othrys1"
    },
    {
      "NAME": "Oceanus",
      "TYPE": "Titan2",
      "RESIDENCE": "Othrys2"
    },
  ],
  vertexAttributes: [{
      "COLUMN_NAME": "NAME",
      "DATA_TYPE_NAME": "VARCHAR"
    },
    {
      "COLUMN_NAME": "TYPE",
      "DATA_TYPE_NAME": "VARCHAR"
    },
    {
      "COLUMN_NAME": "RESIDENCE",
      "DATA_TYPE_NAME": "VARCHAR"
    },
  ]
})).placeAt("content")));
代码语言:javascript
复制
<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap"
  data-sap-ui-libs="sap.ui.layout, sap.m, sap.ui.core"
  data-sap-ui-preload="async"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-compatVersion="edge"
  data-sap-ui-resourceRoots='{"demo": "./"}'
  data-sap-ui-xx-waitForTheme="true"></script>
<body id="content" class="sapUiBody sapUiSizeCompact"></body>

数据结构的设计有些可疑。在其他对象中,(vertexAttributes/COLUMN_NAME的)值是( vertexTable/*)的关键,这使得实现变得复杂。尽管如此,正如您之前已经尝试过的,使用工厂函数显示适当的数据仍然是可能的。

上面的示例在createFormElement调用的每次迭代中创建一个Select。然后,select项可以将其文本绑定到当前的columnName作为路径。

关于templateShareablehttps://stackoverflow.com/a/47734086/5846045

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48007905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档