Использование JavaScript Use-Api Я могу создать пользовательский объект и вернуть его в html-файл. Эта функция позволяет мне создать список пользовательских объектов, которые могут быть использованы для создания меню или другого сложного компонента списка.CQ5/AEM6/Sightly - Возвращает пользовательский тип из Java Use-Api
Давайте предположим, что я следующая структуру содержания:
/content
/project
/homepage
/contentpage1
/contentpage1.1
/contentpage1.2
/contentpage1.3 (hidden)
/contentpage2
/contentpage1.1 (hidden)
/contentpage1.2 (hidden)
/contentpage1.3 (hidden)
/contentpage3
/contentpage4
меню должно содержать только первый уровень contentpages. Каждый элемент меню должен иметь раскрывающийся список со страницами контента второго уровня, если они существуют и не скрыты. Я могу сделать это в JavaScript с помощью следующего кода:
"use strict";
use(function() {
function getMenuItems() {
var currentPageDepth = currentPage.getDepth();
var menuObjects = [];
if(currentPageDepth >= 3) {
var homePage = currentPage.getAbsoluteParent(2);
var list = homePage.listChildren();
while(list.hasNext()) {
var tempPage = list.next()
var customPageObject = createMenuItemObject(tempPage);
menuObjects.push(customPageObject);
}
}
return menuObjects;
}
function createMenuItemObject(page) {
// ...
// looking for any other properties of page or its children
// ...
return {page: page,
visibleChildrenExists: visibleChildrenExists(page)};
}
function visibleChildrenExists(page) {
var list = page.listChildren();
var visibleChildrenExists = false;
while(list.hasNext()) {
var subPage = list.next();
if(!subPage.isHideInNav()) {
visibleChildrenExists = true;
break;
}
}
return visibleChildrenExists;
}
return {
menuObjectsList: getMenuItems(),
};
}
HTML:
<headerComponent data-sly-use.headerComponentJS="headerComponent.js" data-sly-unwrap />
<menuItems data-sly-list.menuItem="${headerComponentJS.menuObjectsList}" data-sly-unwrap >
<li class='${menuItem.visibleChildrenExists ? "" : "direct"}' data-sly-test="${!menuItem.page.hideInNav}">
<a href="${menuItem.page.path}.html">${menuItem.page.title}</a>
<ul data-sly-test="${menuItem.visibleChildrenExists}" data-sly-list.submenuItem="${menuItem.page.listChildren}">
<li data-sly-test="${!submenuItem.hideInNav}">
<a href="${submenuItem.path}.html">${submenuItem.title}</a>
</li>
</ul>
</li>
</menuItems>
Почему я хочу использовать Java Use-Апи? Легче работать с такими интерфейсами, как Resource или Node. Похоже, что это не очень хорошо работает в JavaScript, но мне нужно иметь возможность возвращать пользовательские объекты с несколькими свойствами.
Вопрос: возможно ли что-то подобное с помощью Java-использования-Api? Что мне нужно вернуть? Я не могу вернуть карту, потому что невозможно будет получить доступ к ее элементам, так как невозможно передать параметр в метод Java Use-Api ... Любое предложение?