В ходе выполнения этого шага мы проверяем структуру файлов по умолчанию, указанных для локального компонента.
Может показаться, что для простого примера Hello World четыре объекта JavaScript и несколько строк кода — это слишком много, но это позволяет предоставить основу для создания более сложных компонентов, а также для взаимодействия с жизненным циклом страниц Oracle Cloud Sites Service.
Чтобы просмотреть структуру локального компонента, выполните указанные ниже действия:
На домашней странице Oracle Content Management щелкните Разработчик.
Отображается страница Разработчик.
Нажмите Смотреть все компоненты.
В меню выберите Создать локальный компонент.
Введите имя компонента, например A_Local_Component.
Введите дополнительное описание.
Нажмите Создать.
После этого в списке компонентов появится компонент с именем A_Local_Component.
С помощью настольного клиента синхронизации Oracle Content Management найдите компонент и синхронизируйте его с файловой системой.
Если настольного клиентского ПК нет, можно просмотреть все компоненты и выбрать компонент на странице "Компоненты" интерфейса Oracle Content Management, а затем развернуть его, чтобы увидеть файлы.
Если перечислить файлы, относящиеся к компоненту, можно увидеть следующие файлы:
assets
render.js
settings.html
appinfo.json
_folder_icon.jpgОткройте файл render.js в каталоге /assets.
render.js:
он структурирован как AMD-модуль JavaScript, поэтому он может быть "обязательным" элементом страницы;
Он также содержит ссылки на KnockoutJS и JQuery, которые уже загружены на странице Oracle Content Management.
Рассмотрите структуру файла render.js.
В содержимом файла render.js есть два объекта JavaScript, которые реализуют требуемые API-интерфейсы компонентов Oracle Content Management: sampleComponentFactory и SampleComponentImpl. Эти объекты служат примером реализации для создания любых компонентов на основе KnockoutJS. Реализация этих объектов зависит от используемой технологии.
sampleComponentFactory
Этот объект возвращается AMD-модулем render.js.
Это очень простой объект Factory, который реализует единый интерфейс createComponent().
В более сложных реализациях может использоваться значение args, передаваемое для возврата различных реализаций компонента на основе параметра viewModel. По сравнению с Site Builder это позволяет значительно облегчить реализацию компонента для среды выполнения.
SampleComponentImpl
Основная функция этого объекта — функция render, которая используется для рендеринга компонента на странице.
Для рендеринга компонента Knockout на странице, функция render динамически добавляет шаблон на страницу, а затем применяет к шаблону привязки viewModel.
Остальная часть реализации имеет дело с инициализацией параметра viewModel и шаблона, а также с обработкой обмена сообщений между страницей и компонентом.
Последние два объекта в файле render.js, sampleComponentTemplate и SampleComponentViewModel, обеспечивают пользовательскую реализацию компонента. Реализация на основе этих объектов зависит от ваших требований.
sampleComponentTemplate
Этот объект обеспечивает создание шаблона KnockoutJS. Он ожидает инициализации всех данных компонента, прежде чем пытаться что-то отобразить.
SampleComponentViewModel
viewModel извлекает информацию, хранящуюся в Oracle Content Management от имени компонента, а затем на основе этих данных выбирает способ правильного расположения компонента.
Общие наблюдаемые элементы Knockout, которые используются шаблоном для обработки доступа к метаданным, сохраненными от имени компонента:
self.imageWidth = ko.observable('200px');
self.alignImage = ko.observable();
self.layout = ko.observable();
self.showTopLayout = ko.observable();
self.showStoryLayout = ko.observable();Интеграция триггеров и действий:
Триггер. Функция инициирования триггера Oracle Content Management из компонента, который может быть связан с действиями других компонентов на странице.
self.imageClicked = function (data, event) {
self.raiseTrigger("imageClicked"); // matches appinfo.json
};
Действие. Функция обработки обратного вызова, когда компоненту предлагается выполнить действие с заданными полезными данными.
self.executeActionsListener = function (args) {
// get action and payload
var payload = args.payload,
action = args.action;
// handle 'setImageWidth' actions
if (action && action.actionName === 'setImageWidth') {
$.each(payload, function(index, data) {
if (data.name === 'imageWidth') {
self.imageWidth(data.value);
}
});
}
};
Обратный вызов для выполнения любых зарегистрированных действий по требованию.
SitesSDK.subscribe(SitesSDK.MESSAGE_TYPES.EXECUTE_ACTION, $.proxy(self.executeActionsListener, self));
Подписки на жизненный цикл компонентов:
Инициализация компонента: убедитесь, что рендеринг компонента не выполняется, пока не извлечены все данные. Эта операция обрабатывается посредством наблюдаемых элементов Knockout.
self.componentLayoutInitialized = ko.observable(false); self.customSettingsDataInitialized = ko.observable(false);
Получите начальные значения для всех требуемых свойств. Эта операция выполняется с использованием обратных вызовов для извлечения данных.
SitesSDK.getProperty('componentLayout', self.updateComponentLayout);
SitesSDK.getProperty('customSettingsData', self.updateCustomSettingsData);Обновление метаданных: обратный вызов выполняется всякий раз, когда изменяются метаданные компонента, сохраненные от имени компонента; например, когда пользователь вызывает панель "Настройки" и обновляет данные.
SitesSDK.subscribe(SitesSDK.MESSAGE_TYPES.SETTINGS_UPDATED, $.proxy(self.updateSettings, self));
Примечание.:
Поскольку сервер Oracle Content Management для файлов.html всегда задает тип MIME, невозможно загрузить файл .html и использовать требуемый подключаемый модуль "text!" для его загрузки. Поэтому для шаблонов необходимо либо использовать другое расширение, чтобы загрузить его с помощью подключаемого модуля "text!", либо загрузить его в JavaScript, как показано в предварительно заданных данных.Проверка результатов для шага 2
Теперь у вас должно быть представление о том, как создается структура рендерера пользовательских компонентов. Чтобы проверить его работоспособность, выполните указанные ниже действия.
Обновите объект sampleComponentTemplate в файле render.js, чтобы изменить приведенную ниже строку. Измените этот код:
'<!-- ko if: initialized -->'+
Вместо него используйте этот код:
'<!-- ko if: initialized -->'+ '<div data-bind="text:\'image width is: \' + imageWidth()"></div>' +
Синхронизируйте или загрузите компонент на сервер экземпляров Oracle Content Management.
Измените страницу на сайте и перетащите на пользовательский компонент A_Local_Component на данной странице.
В этот момент должна отображаться запись image width is: 260px.
Откройте панель "Настройки" и нажмите кнопку Пользовательские настройки.
Измените значение в поле image Width на 300px.
Размер изображения по умолчанию увеличивается с 260 до 300 пикселей.
Добавленный вами текст обновляется с учетом записи image width is 300px.
Теперь выполните Шаг 3. Проверка структура настроек локального компонента.