Поле Meteor collection2 в списке $unset

У меня есть простая схема:

  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: '',
...

Я использую автоформу:

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

И никогда не будет обновлен или установлен. Любая подсказка, почему поле может появиться в $unset список?

1 ответ

Я думаю, что я понял это - у вас есть this.unset() в вашем autoValue для imageUrl. Это вызывается всякий раз, когда вы опускаете imageId из модификатора, даже если он уже присутствует в документе, который вы модифицируете!

Другие вопросы по тегам