Я только изучаю Apostrophe CMS, и меня немного смущает вопрос о том, как я могу динамически заполнять поле выбора. Я попробовал то, что предлагает документация ApostropheCMS, но на их сайте нет примера.
Рекомендация Apostrohpe CMS: во-первых, задайте опцию choices для имени метода в вашем модуле. Передать строку, имя метода - не передавать функцию.
Во-вторых, реализуйте эту функцию, чтобы получить один (req) аргумент и вернуть массив вариантов выбора в обычном формате. Вы можете использовать асинхронную функцию или вернуть обещание, которое разрешится в массиве.
Я сделал это разными способами, но это не работает. Я пытался вызвать self.testchoice, testchoice, я пытался вызвать функцию var testchoice и self.testchoice.
Мой код является имитацией возможного вызова API и вырезан из всей части апострофа, которую я создаю.
module.exports = {
name: 'testtype',
addFields: [
{
name: 'test_dynamic_select',
type: 'select',
choices: 'testchoice'
}
],
construct: function(self, options) {
self.testchoice = function(req) {
var testarray = [
{
label: 'London',
value: 'london'
},
{
label: 'Edinburgh',
value: 'edinburgh'
},
{
label: 'Manchester',
value: 'manchester'
}
];
return testarray;
}
}
}
Ожидайте поле выбора с 3 вариантами: Лондон, Эдинбург, Манчестер.
Фактические результаты, пустое поле выбора с несколькими пустыми параметрами.
Трассировка стека в консоли.
- TypeError: self.apos.modules [field.moduleName] field.choices.then не является функцией
- в self.routes.choices (/app/node_modules/apostrophe/lib/modules/apostrophe-schemas/lib/routes.js:72:68)