如何在autoform中获取嵌套对象的数组索引?

时间:2015-11-27 16:28:52

标签: meteor meteor-autoform meteor-collection2

我需要设置子类别的slug,我正在使用autovalue。当我使用数组时,我需要知道实际字段的索引。有一张外卡吗?

例如:

子类。$。潜艇。$。名称

  subcategories: {
    type: [Object],
    optional: true,
  },
  "subcategories.$.name": {
    type: String,
    optional: true,
  },
  "subcategories.$.slug": {
    type: String,
    optional: true,
    autoform: {
      omit: true
    },
    autoValue: function() {
      if (this.field('subcategories.$.name').isSet) {
        return s.slugify( (this.field('subcategories.$.name').value).toLowerCase() );
      }
    },
  },
  "subcategories.$.subs": {
    type: [Object],
    optional: true,
  },
  "subcategories.$.subs.$.name": {
    type: String,
    optional: true,
  },
  "subcategories.$.subs.$.slug": {
    type: String,
    optional: true,
    autoform: {
      omit: true
    },
    autoValue: function(i) {
      if (this.field('subcategories.$.subs.$.name').isSet) {
        return s.slugify( (this.field('subcategories.$.subs.$.name').value).toLowerCase() );
      }
    },
  },

谢谢,

1 个答案:

答案 0 :(得分:0)

我通过更改架构获得了预期的结果。除了更有条理之外,this.siblingField(' name')也有效!

代码:

Categories = new Mongo.Collection('categories');
Schemas = {};

Schemas.Subs = new SimpleSchema({
  "name": {
    type: String,
    optional: true,
  },
  "slug": {
    type: String,
    optional: true,
    autoform: {
      omit: true,
    },
    autoValue: function() {
      if (this.siblingField('name').isSet) {
        return s.slugify( (this.siblingField('name').value).toLowerCase() );
      }
    },
  },
});

Schemas.Subcategories = new SimpleSchema({
  "name": {
    type: String,
    optional: true,
  },
  "slug": {
    type: String,
    optional: true,
    autoform: {
      omit: true,
    },
    autoValue: function() {
      if (this.siblingField('name').isSet) {
        return s.slugify( (this.siblingField('name').value).toLowerCase() );
      }
    },
  },
  "subs": {
    type: [Schemas.Subs],
    optional: true,
  },
});

Schemas.Categories = new SimpleSchema({
  name: {
    type: String,
  },
  slug:{
    type: String,
    unique: true,
    index: 1,
    autoform: {
      omit: true
    },
    autoValue: function() {
      if (this.field('name').isSet) {
        return s.slugify( (this.field('name').value).toLowerCase() );
      }
    },
  },
  subcategories: {
    type: [Schemas.Subcategories],
    optional: true,
  },
});

Categories.attachSchema(Schemas.Categories);