从m.table

时间:2018-06-16 12:25:01

标签: sapui5

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

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

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。但是,它在所有情况下都不起作用,因为对象的结构可能会改变。我打赌有更好的方法可用。但是,我在这里挣扎了一下。

有什么想法吗?

编辑:我想让路径指向表中的text属性。在这个样本中,它将是:cellName2

1 个答案:

答案 0 :(得分:0)

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

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();