在FilterBar中使用DateRangeSelection并使用它来过滤我的表的模型

时间:2014-10-13 10:09:06

标签: sapui5

<fb:FilterBar reset="onReset" search="onSearch">
      <fb:filterItems>
        <fb:FilterItem name="dateRange" label="Date Range" mandatory="true">
          <fb:control>
            <DateRangeSelection id="dateRange" />
          </fb:control>        
        </fb:FilterItem> 
</fb:filterItems>  
</fb:FilterBar>

在我的onSearch方法中,我获得了绑定,然后使用它来设置表的过滤器:

onSearch : function(oEvt) {
    var oFilterBar = oEvt.getSource(), aFilters = [], oParameters;
    aFilters = oFilterBar.getFilters();
    oParameters = oFilterBar.getParameters();

    this.doReload(aFilters, oParameters);
}

这里的第一个问题是我在调用oFilterBar.getFilters()时得到'undefined is not function'。 oFilterBar本身并不是未定义的,所以一见钟情就好了。我的观点包括xmlns:fb="sap.ui.comp.filterbar"

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

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

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


更新

艾伦的回应之后我做了一些修改:

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);
},

它运行时没有任何错误,但是当我选择一个日期或范围时,它会过滤掉所有内容并且表格为空。

1 个答案:

答案 0 :(得分:1)

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

  • 您也应设置displayFormat="yyyy/MM/dd" DateRangeSelection

  • 是的,您应该在DateRangeSelection功能中设置onInit()的默认日期。