Sapui5 在过滤器栏中使用DateRangeSelection并使用它为我的表过滤模型

Sapui5 在过滤器栏中使用DateRangeSelection并使用它为我的表过滤模型,sapui5,Sapui5,这里的第一个问题是我在调用oFilterBar.getFilters()时得到“undefined不是函数”。过滤器条本身并不是未定义的,所以乍一看就可以了。我的视图包括xmlns:fb=“sap.ui.comp.filterbar” 我很难将两者联系起来,并弄清楚如何使用选定的范围作为过滤器。表的“我的模型”有一个项目列表,每个项目都有一个名为“日期”的字段,可用于根据所选范围筛选项目。但该字段有自己的特定日期格式yyyymmdd 附带问题,为DateRangeSelection控件设置默认起

这里的第一个问题是我在调用oFilterBar.getFilters()时得到“undefined不是函数”。过滤器条本身并不是未定义的,所以乍一看就可以了。我的视图包括
xmlns:fb=“sap.ui.comp.filterbar”

我很难将两者联系起来,并弄清楚如何使用选定的范围作为过滤器。表的“我的模型”有一个项目列表,每个项目都有一个名为“日期”的字段,可用于根据所选范围筛选项目。但该字段有自己的特定日期格式yyyymmdd

附带问题,为DateRangeSelection控件设置默认起始日期和截止日期的最佳方法是在控制器的init函数中


更新

艾伦回复后,我做了一些修改:

doReload : function(aFilters, oParameters) {
    var oTable = this.byId("clockHistoryTable");
    var oBinding = oTable.getBinding("items");
    oBinding.filter(aFilters);
}
它运行时没有任何错误,但当我选择一个日期或范围时,它会过滤掉所有内容,并且表是空的。

  • 对于
    FilterBar
    ,没有名为
    getFilters
    的方法,仅适用于
    SmartFilterBar
    。您需要基于
    oEvent.getParameter(“selectionSet”)
    构建自己的过滤器

  • 您还应该设置日期范围选择的
    displayFormat=“yyyy/MM/dd”

  • 是的,您应该在
    onInit()
    函数中设置
    DateRangeSelection
    的默认起始日期和截止日期


感谢您的支持。我用我同时改变的内容更新了我的问题。filterItem的名称是否应与模型中字段的名称匹配?在我的情况下,那就是“日期”。displayFormat=“yyy/MM/dd”仅用于在DateRangeSelection字段中设置格式,对吗?因为在我的例子中,模型中的日期值是以“yyyyMMdd”(无斜杠)格式存储的,所以我不清楚它本身是如何工作的。.oEvt.getParameter(“selectionSet”)不是您想要的过滤器。您可以在Chrome控制台中检查它,它应该是DateRangeSelection。您需要自己构建sap.ui.model.odata.Filter的数组。displayFormat将设置DateRangeSelection的格式,因此其值将与您的数据模型相同。我将自己构造筛选器,并将开始日期和结束日期解析为yyyyMMdd,因为我不希望最终用户以这种难看的格式查看所选日期。我可以在oEvent.getParameter(“selectionSet”)[0]中看到该值。\u lastValue,这是从/到访问该值的正确方法吗?是的,它是正确的。然后您可以使用操作员sap.ui.model.FilterOperator.BT构建sap.ui.model.Filter。
onSearch : function(oEvt) {
    var oFilterBar = oEvt.getSource(), aFilters = [], oParameters;
    aFilters = oFilterBar.getFilters();
    oParameters = oFilterBar.getParameters();

    this.doReload(aFilters, oParameters);
}
doReload : function(aFilters, oParameters) {
    var oTable = this.byId("clockHistoryTable");
    var oBinding = oTable.getBinding("items");
    oBinding.filter(aFilters);
}
doReload : function(aFilters) {
    var oTable = this.byId("clockHistoryTable");
    var oBinding = oTable.getBinding("items");
    oBinding.filter(aFilters);
},

onReset : function(oEvent) {
    this.doReload();
},

onSearch : function(oEvt) {
    var oFilterBar = oEvt.getSource(), aFilters = [];
    aFilters = oEvt.getParameter("selectionSet");
    this.doReload(aFilters);
},