如何在Meteor中创建AutoForm字段以从另一个集合中选择一条记录并将其另存为子文档?

时间:2015-08-23 12:42:22

标签: meteor meteor-autoform

我一直在努力解决这个问题几个小时,我找不到一个好的解决方案,所以也许有人可以对此有所了解。

我有一个像这样的简单模式:

    var groupschema = new SimpleSchema({
      name: {
        label: 'Name',
        type: String
      },
      description: {
        label: 'Description',
        type: String
      }
    }

我还有另一个:

    var itemschema = new SimpleSchema({
      name: {
        label: 'Type:',
        type: String
      },
      details: {
        label: 'Details',
        type: String
      },
      group: [groupschema] // <--- this is my main interest
    }

如果我使用上面的代码示例,AutoForm会生成一个“内部形式”,对于某些学生而言实际上非常酷(例如,对于有一系列地址或电话号码的联系人),但对我来说,我想要一个 - down选择组的名称,当我单击“插入/更新”按钮(取决于当前表单)时,我想将整个组文档作为子文档添加到插入/更新的项目文档中。

这样的东西将插入mongodb:

{
    _id: the generated mongoid,
    name: "This is a type",
    details: "There are some thing to know about this type",
    group:{
        name: "Cool group",
        description: "This is a really cool group"
    }
}

实际文件要复杂得多,上面的例子只是一个过于简单的版本。

我昨天已经停止写这个问题,并试图做我自己的版本。

我的 - 一半烘焙 - 解决方案是:

  • 在名为groupselect的模式中引入一个新字段(type string,autoform type:select)
  • 使用Collection.find()。map()lookup
  • 填充其内容

groupselect: { type: String, label: 'Group', optional: true, blackbox: true, autoform:{ type: "select", options : function() { return Issuegroup.find().map(function (c) { return {label: c.name , value: c._id}; }); } }
},

  • 在插入之前使用autoform hook我将子文档分配给真实的fiel group = Group.find({_id:doc.groupselect})并从doc中删除帮助字段
  • 在更新前挂钩中也使用相同的技术进行更新表格

我似乎无法以干净的方式解决的问题是在显示更新表单时设置辅助字段'groupselect'的默认值。我已经尝试了docToForm钩子,但没有运气。

这不是一个非常常见的问题吗?我想必须有一个合适的解决方案,所以我打赌我错过了一些非常明显的东西,希望有人会为我指出。

由于

0 个答案:

没有答案