首页 > 解决方案 > 从 m.table 中的属性获取路径

问题描述

我正在寻找一种方便的方法来从表格单元格中获取路径。

背景:需要实现一个搜索字段,允许过滤响应表的所有列。在这里,需要路径作为过滤器对象的参数。

XML 代码

<Table items="{path: 'modelName>pathPart1/pathPart2'}">
  <headerToolbar>
    <Toolbar>
      <Title text="titleText"/>
      <SearchField search="searchInTable"/>
    </Toolbar>
  </headerToolbar>
  <columns>
    <Column>
      <Text text="column1"/>
    </Column>
    <Column>
      <Text text="column2"/>
    </Column>
  </columns>
  <ColumnListItem>
    <Text text="{modelName>cellName1}"/>
    <Text text="{modelName>cellName2}"/>
  </ColumnListItem>
</Table>

控制器逻辑

searchInTable: function(event) {
  var table = event.getSource().getParent().getParent();
  var query = event.getParameters("query");
  table.getBinding("items").filter(this.getFilters(table, query));
},

getFilters: function(table, query) {
  var aFilters = [];
  var items = table.getItems();
  // Loop  through items aggregation and populate filter object
  jQuery.each(items, function(i, oItem) {
    // Get path from cells (e.g. cellName1)
    var sPath = oItem.mAggregations.cells[i].mBindingInfos.text.binding.sPath;
    var sOperator = FilterOperator.EQ;
    var sValue1 = query;
    var oFilter = new Filter(sPath, sOperator, sValue1);
    aFilters.push(oFilter);
  });
  return aFilters;
},

我们可以用更方便、更健壮的方法来替换这部分吗?

var sPath = oItem.mAggregations.cells[i].mBindingInfos.text.binding.sPath;

正如您所注意到的,我正在尝试接收sPath整个对象的经过。但是,它并非在所有情况下都有效,因为对象的结构可能会发生变化。我敢打赌有更好的方法可用。但是,我在这里有点挣扎。

有任何想法吗?

编辑:我确实希望获得指向表中文本属性的路径。在此示例中,它将是:cellName2

标签: sapui5

解决方案


我现在正在打电话,所以我无法测试它,但它是这样的

oItem.getCells()[i].getBindingContext().getPath()

如果我没记错的话,getCells() 来自 ColumnListItem API。

其他两个来自 ODataListBinding API 或类似的东西......

如果您深入了解 API,您会发现它

编辑:我认为您应该在获取上下文时提供模型名称。但是我记不太清了...

oItem.getCells()[i].getBindingContext("modelName").getPath()

尝试两者,有和没有它......

EDIT2:这里有片段http://jsbin.com/votaxiyedi/edit?html,output

这就是你需要的:

oItem.getBindingContext("odata").getPath() + "/" + oItem.getCells()[0].getBinding("text").getPath();


推荐阅读