#sapui5
#sapui5
Вопрос:
У меня есть следующая проблема. При переходе к другому представлению я хотел бы указать несколько фильтров в маршруте, чтобы передать их в путь модели.
Таким образом, в основном у меня есть первое представление с несколькими полями ввода, по которым должен быть отфильтрован набор данных. Во втором представлении показаны результаты.
Прочитав документацию и выполнив некоторую отладку, я пришел к следующему решению:
Сначала я настроил маршрут с путем и необязательным параметром запроса.
{ "name": "SearchResults", "pattern": "SearchResults/{searchResultsPath}:?query:", "target": [ "TargetSearchResults" ] }
В моем контроллере представления поиска у меня есть переменная $filter
, содержащая фильтры в виде строки:
"FirstName EQ John and LastName EQ Doe"
.
В методе навигации я добавил "?query"
свойство и $filter
в качестве объекта.
this.navTo("SearchResults", { searchResultsPath: window.encodeURIComponent("/DataSet"), "?query": {$filter} });
В моем контроллере результатов поиска второго представления я мог бы получить доступ к строке фильтра, просто обратившись к $filter
объекту из события.
oEvent.getParameter("arguments")["?query"].$filter
Анализ строки фильтра был тривиальным, и я мог бы заполнить свойство filters, связав агрегацию таблицы. URL-адрес также был правильным, так как там были мои фильтры.
Однако это, по-видимому, не самый простой способ сделать.
Есть ли лучший способ сделать это? Я упускаю что-то очевидное?
Заранее спасибо.
Комментарии:
1. Я бы добавил объекты фильтра (реальные фильтры, а не строку) в глобальную модель JSON. Затем во втором представлении вы можете просто получить доступ к объектам фильтра, и вам не придется настраивать сложные маршруты и странный синтаксический анализ строк.