Мы начали разработку сайта в Apostrophe CMS на основе стороннего API и остановились на следующей проблеме:
- нам нужен виджет, который имеет выбор (на стороне администратора).
- параметры из него генерируются на основе ответа API.
- Пользователь Admin выберет опцию, когда он / она настроит параметры виджета (на стороне сервера).
- на основе этого выбора мы будем называть другой API, и на основе этого ответа будет генерироваться некоторый HTML (на стороне клиента; изображения, тексты и т. Д.)
Сценарий таков: администратор выбирает продукт из списка, и на передней панели мы будем показывать информацию, основанную на этом выборе.
const request = require( 'request-promise' );
module.exports = {
extend: 'apostrophe-widgets',
label: 'Preloaded list widget',
addFields: [
{
label: 'Product',
name: 'product',
type: 'select',
required: true,
choices: "getChoices"
}
],
getChoices: async function( req )
{
const products = await request( {
uri: "http://API_for_product_list",
json: true
} );
var choiceList = [];
for( idx = 0; idx < products.totalRecords; idx++ )
{
var option =
{
label: products.items[ idx ].label,
value: products.items[ idx ].value
};
choiceList.push( option );
}
return choiceList;
}
};
При запуске приложения я получил следующее предупреждение:
Тип загружаемого виджета, название поля продукта:
При использовании showFields field.choices должен быть массивом
И список показывает пустой. Функция getChoices никогда не вызывается.
Я что-то упускаю, но я не знаю что. Мы сделали все согласно документации.