【问题标题】:Subschema as array item with AutoForm, SimpleSchema使用 AutoForm、SimpleSchema 作为数组项的子模式
【发布时间】:2017-10-22 02:04:48
【问题描述】:

我试图让子模式作为一个数组工作,我认为这是处理我的问题的正确方法(但如果我错了,请纠正我!)。我提供了一个简化的工作示例来显示我的问题,基于 AutoForm 包提供的 BooksSchema 示例。在我的示例中,我有一个图书馆集合,并且“图书馆”对象中的一个字段应该是图书馆的图书集合。渲染 AutoForm 并没有给我 Book 集合中定义的任何输入标签,而是只显示一 (1) 个空文本输入字段。

架构:

import SimpleSchema from 'simpl-schema';
SimpleSchema.extendOptions(['autoform']);

BooksSchema = new SimpleSchema({
  title: {
    type: String,
    label: "Title",
    max: 200
  },
  author: {
    type: String,
    label: "Author"
  },
  copies: {
    type: Number,
    label: "Number of copies",
    min: 0
  },
  lastCheckedOut: {
    type: Date,
    label: "Last date this book was checked out",
    optional: true
  },
  summary: {
    type: String,
    label: "Brief summary",
    optional: true,
    max: 1000
  }
}, { tracker: Tracker });

LibrariesSchema = new SimpleSchema({
  collection: {
    type: Array
  },
  'collection.$': {
      type: BooksSchema,
      minCount: 1
  }
});

LibrariesSchema.extend(BooksSchema);


Libraries = new Mongo.Collection("libraries");
Libraries.attachSchema(LibrariesSchema);

自动表格:

  {{> quickForm collection="Libraries" id="insertBookForm" type="insert"}}

非常感谢您抽出宝贵时间,真的为此苦苦挣扎了很长时间!

【问题讨论】:

  • 您必须使用扩展来组合两个模式。例如 - MainSchema.extend(SubSchema);
  • @blueren 非常感谢您抽出宝贵的时间。我更新了我的代码以包含此“扩展”(请参阅​​已编辑的问题),但不幸的是它并没有对我造成任何更改。

标签: meteor meteor-autoform simple-schema


【解决方案1】:

在我的情况下,我确实能够通过使用不带括号的 John Smith 的示例来解决问题。

LibrariesSchema = new SimpleSchema({
  'books': {
      type: BooksSchema,
      minCount: 1
  }
});

【讨论】:

    【解决方案2】:
    LibrariesSchema = new SimpleSchema({
      'books': {
          type: [BooksSchema],
          minCount: 1
      }
    });
    

    特定类型的数组,用于check() 或模式定义,指定为[SomeType],例如。 [String][BooksSchema] 在您的情况下。

    【讨论】:

    • 非常感谢约翰的回复。不幸的是,我在使用您的代码时收到以下错误:'未捕获的错误:书籍字段的无效定义:“类型”可能不是数组。将其更改为数组。'。如果我理解正确,这些 [括号] 自 AutoForms 6.0 和 collection2-core 起不应再使用。参见例如github.com/aldeed/meteor-simple-schema#combining-simpleschemas。再次感谢!
    • 我说的可能不再是真的,真的。我在之前的项目中使用过 SimpleSchema。
    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多