ApostropheCMS Форма обратной связи с приложением - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в Apostrophe и пытаюсь создать форму обратной связи с вложенными файлами в Apostrophe, следуя инструкции.https://apostrophecms.org/docs/tutorials/intermediate/forms.html

Я также создал поле вложения в моем index.js, и оно прекрасно работает из панели администратора.

Теперь я пытаюсь создать свой собственный html для формы сотправка файла.

// в lib / modules / contact-form-widgets / public / js / always.js

apos.define('contact-form-widgets', {

    extend: 'apostrophe-widgets',

    construct: function(self, options) {

      self.play = function($widget, data, options) {

        var $form = $widget.find('[data-contact-form]');
        var schema = self.options.submitSchema;
        var piece = _.cloneDeep(self.options.piece);

        return apos.schemas.populate($form, self.schema, self.piece, function(err) {
          if (err) {
            alert('A problem occurred setting up the contact form.');
            return;
          }
          enableSubmit();
        });

        function enableSubmit() {
          $form.on('submit', function() {
            submit();
           //I can access file here
            // console.log($form.find('file'))

            return false;
          });
        }

        function submit() {
          return async.series([
             convert,
            submitToServer
          ], function(err) {
            if (err) {
              alert('Something was not right. Please review your submission.');
            } else {
              // Replace the form with its formerly hidden thank you message
              $form.replaceWith($form.find('[data-thank-you]'));
            }
          });
          function convert(callback) {
            return apos.schemas.convert($form, schema, piece, callback);
          }
          function submitToServer(callback) {



            return self.api('submit', piece, function(data) {

                alert("I AM AT SUBMIT API ")
              if (data.status === 'ok') {
                // All is well
                return callback(null);
              }
              // API-level error
              return callback('error');
            }, function(err) {
              // Transport-level error
                alert("I AM HERE AT API ERROR")

              return callback(err);
            });
          }
        }
      };
    }
  });



    //and my widget.html is

    <div class="form-group">
        <input name="custom-file" type="file">
      </div>

Когда я запускаю это, я получаю следующие ошибки

user.js:310 Uncaught TypeError: Cannot read property 'serialize' of undefined
    at Object.self.getArea (user.js:310)
    at Object.self.getSingleton (user.js:303)
    at Object.convert (user.js:686)
    at user.js:164
    at async.js:181
    at iterate (async.js:262)
    at async.js:274
    at async.js:44
    at setImmediate.js:27
    at runIfPresent (setImmediate.js:46)

У меня вопрос, как мне обработать отправку файла?Есть ли лучший подход для этого?

1 Ответ

0 голосов
/ 29 ноября 2018

Это гораздо проще сделать с помощью модуля apostrophe-pieces-submit-widgets, который позволяет определить схему для того, что пользователь может отправить.В него можно включить поле типа attachment, что продемонстрировано в README.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...