2017-01-17 6 views
0

Я следую 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); 
     } 
    }; 

    } 
}; 
+0

Возможно, это связано с ошибкой в ​​настройке настраиваемого поля, поэтому, пожалуйста, поделитесь этим кодом. Это, безусловно, факт, что нам нужно больше нюансных и дружественных сообщений об ошибках. –

+0

Я добавил конфигурацию настраиваемого поля. –

+0

@boutell Любые идеи? Ошибка исходит из модуля apos-schema и здесь не работает: 'if (field.required &&! Data [name] .length)' внутри функции, называемой convertString. Какая строка преобразуется? Кажется, я назвал все поля формы правильно. Я не понимаю, какие данные [имя должно быть. –

ответ

0

Я ведущий разработчик Apostrophe на P'unk авеню. У нас был разговор на другом форуме, но только для записи, там оказалось два вопроса:

  1. Форма была подающие на любой кнопки мыши, потому что это то, что кнопка элементы делают, когда они типа «представить , "и" submit "- значение по умолчанию для типа (по крайней мере, в некоторых браузерах). Это не проблема Apostrophe, и ее можно решить, установив атрибут типа по своему желанию.

  2. Разметка формы была обычной и не имела элементов обертки, таких как data-name="title" и т. Д. (Что соответствует схеме) вокруг фактических элементов поля формы. Вы можете использовать пользовательскую разметку, но все «движущиеся части», найденные в нашем официальном schemaMacros.html, должны быть там, то есть атрибуты данных должны существовать.

Мы планируем сделать проще использовать собственную разметку без этих оберток, по крайней мере, в тех случаях, когда мы можем выяснить, какие поля, которые без них.

FYI, элемент типа = "файл" не будет работать из коробки, но проверьте тип поля вложения в схемах апострофа, что довольно удивительно для этой роли.