0

我有一个简单的架构:

  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列表中?

4

1 回答 1

0

我想我已经弄清楚了 - 你this.unset()autoValuefor imageUrl中有一个。每当您从修饰符中省略imageId时都会调用它,即使它已经存在于您正在修改的文档中!

于 2015-08-31T05:20:04.753 回答