В ходе выполнения этого шага мы проверяем структуру файлов по умолчанию, указанных для локального компонента.
Может показаться, что для простого примера 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. Проверка структура настроек локального компонента.