<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 методе я получаю связывание, а затем использовать это, чтобы установить фильтры стола:Использование DateRangeSelection в FilterBar и использовать ее для фильтрации модель для моего стола
onSearch : function(oEvt) {
var oFilterBar = oEvt.getSource(), aFilters = [], oParameters;
aFilters = oFilterBar.getFilters();
oParameters = oFilterBar.getParameters();
this.doReload(aFilters, oParameters);
}
Первый вопрос здесь Я получаю «undefined is not a function» в вызове oFilterBar.getFilters(). Сам 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 будет в функции инициализации контроллера?
Update
После réponse Аллена я сделал некоторые изменения:
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);
},
Она работает без каких-либо ошибок, но при выборе даты или диапазона, он отфильтровывает все и таблица пуста.
Благодарим за поддержку Аллен. Я обновил свой вопрос тем, что я изменил тем временем. Должно ли имя filterItem соответствовать имени поля в модели? В моем случае это будет «дата». displayFormat = "yyyy/MM/dd" только для установки формата в поле DateRangeSelection, правильно? Потому что в моем случае значение даты в модели сохраняется в формате «yyyyMMdd» (без косых черт), поэтому мне не ясно, как это будет работать само по себе .. – Pieter
oEvt.getParameter («selectionSet») - это не фильтры вы хотите. Вы можете проверить его на консоли Chrome, это должно быть DateRangeSelection. Вам нужно построить массив sap.ui.model.odata.Filter самостоятельно. DisplayFormat установит формат DateRangeSelection, поэтому его значение будет таким же, как и ваша модель данных. – Allen
Я сам создам фильтр и разберусь с датами в yyyyMMdd, потому что я не хочу, чтобы конечный пользователь видел выбранную дату в этом уродливом формате. Я могу видеть значение в oEvent.getParameter ("selectionSet") [0] ._ lastValue, является ли это правильным способом доступа к этому из/в? – Pieter