如何在不使用表单的情况下向AutoForm的表单对象添加值?

时间:2015-09-30 08:01:12

标签: meteor meteor-autoform

我已经通过AutoForm创建了一个表单。

就数据来源而言,我可以填写表格的一部分并使用:

AutoForm.getFormValues('form-id').insertDoc // returns the contents of the form

当我验证表单时,我可以这样做:

var formValues = AutoForm.getFormValues('form-id').insertDoc;

var isValid = MyCollection.simpleSchema().namedContext("myContext").validate(formValues); 

// if isValid returns true, then I enable the Submit button

我想手动将信息添加到Autoform用于验证和提交到集合的任何对象中,而不是填写表单的某些部分。

例如,架构中的数据字段根本不需要出现在表单中。

购物车:

ShoppingCartSchema = {
  totalPrice: {
    type: Number,
    optional: false
  },
  itemsSelected: {
    type: [Object],
    optional: false
  }
};

itemsSelected的数据显然是通过表单上的用户输入提供的。

totalPrice的数据不应来自表单输入。它是在代码中生成的。

但是,在AutoForm将表单提交到集合之前,仍需要将totalPrice验证为必填字段。

那么如何将totalPrice添加到Autoform最终验证的对象上?

2 个答案:

答案 0 :(得分:1)

如果您愿意,可以使用autovalue。

ShoppingCartSchema = new SimpleSchema({
  'items': {
    type: [Object],
  },
  'items.$.name': {
    type: String
  },
  'items.$.price': {
    type: Number
  },
  totalPrice: {
    type: Number,
    autoValue: function () {
      if (this.field('items').isSet) {
        let total = this.field('items').value.reduce(function (sum, item) {
          return sum + item.price;
        }, 0);
        if (this.isInsert) {
          return total;
        } else {
          return { $set: total };
        }
      }
    }
  },
});

答案 1 :(得分:0)

Autoform Hooks可以帮助您在将数据保存到Collection之前对其进行操作。

在你的情况下。

AutoForm.hooks({
  form-id: { // The Autoform ID
    onSubmit: function (insertDoc, updateDoc, currentDoc) {
      if (customHandler(insertDoc)) { // Your Logic here
        this.done(); // This is Required
      } else {
        this.done(new Error("Submission failed"));
      }
      return false;
    }
  }
});

更多信息请参阅Autoform Readme