$ unset列表中的Meteor collection2字段

时间:2015-08-31 01:54:43

标签: meteor meteor-autoform meteor-collection2

我有一个simpleSchema:

  imageUrl: {
    type: Object,
    optional: true,
    autoValue: function() {
      if (Meteor.isClient) return;
      var imageField = this.field('imageId');
      if (!imageField.isSet){
        this.unset();
      } else {
        var imageObj = MealsImages.findOne(imageField.value);
        if (imageObj){
          return {thumb: imageObj.S3Url('thumb'), big: imageObj.S3Url('big')};
        }
      }
    },
    autoform: {
      label: false,
      type: 'hidden',
      afFieldInput: {
        type: "hidden"
      }
    }
  },

出于某种原因,当我更新记录时,此字段始终显示在$ unset数组中:

Meteor.methods({
  mealUpsert: function(doc, mealId) {
    check(doc, Meals.simpleSchema());

    console.log('test7');
    console.log(doc);

    if (mealId){
      Meals.update({_id: mealId}, doc);
    } else {
      mealId = Meals.insert(doc);
    }
    return false;
  }
});

将打印:

I20150830-21:49:39.560(-4)? { '$set': 
...
I20150830-21:49:39.562(-4)?   '$unset': 
I20150830-21:49:39.562(-4)?    { imageUrl: '',
...

我正在使用autoform:

<template name="mealUpdateForm">
  <div class="meal-content">
    {{> quickForm collection="Meals" doc=this id="mealUpdateForm" meteormethod="mealUpsert" type="method-update"}}
  </div>
</template>

永远不会更新或设置。任何关于为什么字段可以出现在$unset列表中的线索?

1 个答案:

答案 0 :(得分:0)

我想我已经明白了这一点 - 你的this.unset()中有autoValue imageUrl 。只要您从修改器中省略 imageId ,就会调用此方法,即使它已经存在于您正在修改的文档中!