如何在[String]类型的集合中为元素设置默认值?

时间:2016-03-08 10:22:27

标签: meteor meteor-autoform meteor-collection2

我点击提交按钮后快速成型,此方法被解雇

submitPost: function (app) {
    check(app, {
      title: String,
      description: String,
      category: String,
      price: Number
    });
    var knownId = Products.insert(app);
    Products.update({ _id: knownId }, { $set:{screenShots: scs, previewImage: pi, sourceCode: zip }});

  }

当我没有提供" screenShots,previewImage和sourceCode"时,提交按钮不起作用。集合中的默认值。

我给他们一个默认值,如下图所示

previewImage: {
    type: String,
    defaultValue: "jjj",
  },
   sourceCode: {
    type: String,
    defaultValue: "jjj",
  },
  screenShots: {
    type: [String],
    autoValue: function() {
      return [];
    }
  },

现在表单中的提交按钮正在运行,并且触发了更新方法。它更新" previewImage和sourcCode"但是" screenShots"仍然是空的。

我不确定,但我相信问题与autoValue有关,我应该把它作为一个默认值,但是我如何给一个字符串数组的元素一个默认值呢?

或问题与其他问题有关?

2 个答案:

答案 0 :(得分:1)

autoValue选项由SimpleSchema包提供,并在那里记录。 Collection2为任何作为C2数据库操作的一部分调用的autoValue函数添加以下属性:

  • isInsert:如果是插入操作,则为True
  • isUpdate:如果是更新操作,则为True
  • isUpsert:如果是upsert操作(upsert()或upsert:true),则为True。

因此,如果您想在更新时提供autoValue,则必须在您的架构中使用isUpdate。

createdAt: {
    type: Date,
    autoValue: function() {
      if (this.isInsert) {
        return new Date();
      } else if (this.isUpsert) {
        return {$setOnInsert: new Date()};
      } else {
        this.unset();  // Prevent user from supplying their own value
      }
    }
},

所以你的架构将是这样的:

previewImage: {
    type: String,
    defaultValue: function() {
         if (this.isInsert) {
            return 'fff';
         } else if (this.isUpdate) {
            return 'fff';
         }
  },
   sourceCode: {
    type: String,
    defaultValue:function() {
         if (this.isInsert) {
            return 'jjj';
         } else if (this.isUpdate) {
            return 'jjj';
         }
  },
  screenShots: {
    type: [String],
    autoValue: function() {
         if (this.isInsert) {
            return [];
         } else if (this.isUpdate) {
            return [];
         }
    }
},

有关详细信息,请查看this

答案 1 :(得分:1)

如果值是可选的,则在模式中使用optional: true,并且如果它是空的,它将通过检查。