Я следую this tutorial, чтобы создать форму в моем проекте, которая использует Apostrophe CMS. Когда я следую учебному курсу, я могу создать форму и отправить и понять, как просмотреть представление формы в консоли администратора.Создание форм в Aposstrophe CMS
Однако, когда я начинаю настраивать форму в соответствии с моими требованиями к конкретному проекту, я нарушаю форму, что приводит к сбою проверки формы. Я получаю ошибку при отправке формы является:
TypeError: Cannot read property 'length' of undefined at Object.convertString [as convert] (user.js:727) at user.js:145 at async.js:181 at iterate (async.js:262) at Object.async.forEachOfSeries.async.eachOfSeries (async.js:281) at Object.async.forEachSeries.async.eachSeries (async.js:214) at Object.self.convert (user.js:127) at convert (always.js:57) at async.js:718 at iterate (async.js:262)
Мои изменения, другие затем регулировочные объект определения поля моего контакт-форму: index.js файл, в основном в контактных форм-виджетов: widget.html.
В учебнике виджеты contact-form-widgets: widget.html вид импортирует apostrophe-schemas: macros.html и использует html-файлы из apostrophe-schemas и apostrophe-ui для создания html формы. Поэтому мои конкретные вопросы связаны с важностью этих двух модулей. Являются ли эти модули просто использованы для отображения на передней панели формы? Содержит ли содержание взглядов этих модулей какое-либо отношение к заданию представления и после представления формы? Если ответ отрицательный, это означает, что я неправильно настраиваю форму, поэтому, есть ли какие-либо ресурсы для решения этой проблемы?
Вот мой контакт-форма: index.js конфигурационный файл:
var async = require('async');
module.exports = {
extend: 'apostrophe-pieces',
name: 'contact-form',
label: 'Contact Form',
alias: 'contactForm',
addFields: [
{
name: 'name',
type: 'string',
label: 'First & Last Name',
required: true
},
{
name: 'company',
type: 'string',
label: 'Company Name',
required: true
},
{
name: 'email',
type: 'string',
label: 'Email Address',
required: true
},
{
name: 'phone',
type: 'string',
label: 'Phone Number & Extension',
required: true
},
{
name: 'subject',
type: 'string',
label: 'Subject',
required: true
},
{
name: 'message',
type: 'string',
label: 'Message',
textarea: true,
placeholder: "Don't be stupid"
}
],
permissionsFields: false,
afterConstruct: function(self) {
self.setSubmitSchema();
},
construct: function(self, options) {
self.setSubmitSchema = function() {
self.submitSchema = self.apos.schemas.subset(self.schema,
[ 'name', 'company', 'email', 'phone', 'subject', 'message' ]
);
};
self.submit = function(req, callback) {
var piece = {};
return async.series([
convert,
insert
], callback);
function convert(callback) {
return self.apos.schemas.convert(req, self.schema, 'form', req.body, piece, callback);
}
function insert(callback) {
return self.insert(req, piece, { permissions: false }, callback);
}
};
}
};
Возможно, это связано с ошибкой в настройке настраиваемого поля, поэтому, пожалуйста, поделитесь этим кодом. Это, безусловно, факт, что нам нужно больше нюансных и дружественных сообщений об ошибках. –
Я добавил конфигурацию настраиваемого поля. –
@boutell Любые идеи? Ошибка исходит из модуля apos-schema и здесь не работает: 'if (field.required &&! Data [name] .length)' внутри функции, называемой convertString. Какая строка преобразуется? Кажется, я назвал все поля формы правильно. Я не понимаю, какие данные [имя должно быть. –