Динамическое выделение полей в апострофе - PullRequest
2 голосов
/ 12 июня 2019

Я только изучаю 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)
...