使用相同的表单进行插入和编辑

时间:2014-06-07 22:41:31

标签: forms mongodb insert meteor edit

如何使用相同的表单在Meteor中插入和编辑文档。

对于插入,我使用没有变量的空表格:

<template name="frmOrganization">
   // no doc variable
   <form class="form-horizontal" role="form">
     ...
     <input type="text" class="form-control" id="Name">

对于更新,我使用带变量的表单:

<template name="frmOrganization">
   {{#with organization}} // doc variable
   <form class="form-horizontal" role="form">
     ...
     <input type="text" class="form-control" id="Name" value="{{Name}}">

3 个答案:

答案 0 :(得分:2)

(使用Meteor 0.9.3 + Iron-Router)

我有同样的问题,我使用的解决方法如下(似乎更像是一个黑客,但我避免有多种形式)

<template name="frmOrganization">
// no doc variable
<form class="form-horizontal" role="form">
  ...
  <input type="text" class="form-control" id="Name" value={{name}}>
  {{#if name}}
    <input type="submit" value="Edit"/>
    <input type="submit" value="Delete"/>
  {{else}}
    <input type="submit" value="Add"/>
  {{/if}}
  ...

在我的router.js文件中

this.route('frmOrganization', {
  path: '/organisation/:_id/edit',
  data: function() { return Organisation.findOne(this.params._id); }
});

所有看起来都很标准,但是对于我的添加链接,我使用:

<a href="{{pathFor 'frmOrganization' _id=new}}">Add</a>

这将创建以下链接:

/organisation/null/edit

空白页面会为您提供“添加”页面,而ID会为您提供编辑页面。

- 流星Noob

答案 1 :(得分:0)

一种简单的方法是使用upsert将组织文档的_id作为第一个参数。如果在尝试upsert时集合中找不到任何内容,则会将数据插入到新文档中(第二个参数)。

但是,有一些软件包可以使这项任务变得更加容易:

autoform,simple-schema和collection2

(我会链接到其他人,但缺乏声誉)

首先定义一个模式并将其应用于集合,如下所示:

Pages = new Meteor.Collection('pages');

PagesSchema = new SimpleSchema({
  title: {
    type: String,
    label: 'Title',
    max: 100
  },
  body: {
    type: String,
    label: 'Body',
    max: 1000
  }
});

Pages.attachSchema(PagesSchema);

然后可以简单地切换这两个模板以进行插入或更新:

{{> quickForm collection="Pages" id="page-form" type="insert"}}

{{> quickForm collection="Pages" doc=page id="page-form" type="update"}}

(&#39;页面&#39;是模板中可用的文档)

这些把手助手将生成整个表格,您甚至可以使用它们进行验证。

答案 2 :(得分:0)

假设您在路径create处有/my-form表单。这非常简单。它在数据库中创建一个新文档,其中包含:_id,例如,XYZ123。

现在你想要一个编辑表格。

您创建了一个转到/my-form/XYZ123

的链接

您已使用文档创建了一个路径:_id作为参数。

然后设置路径以读取路径的:_id参数作为数据。 (以Discover Meteor书为例)

现在将代码添加到现有表单中,该表单将采用以下内容:来自路径的_id,查找文档,并使用从数据库中找到的值预先填充表单中的值:_id

并更改提交按钮以进行更新而不是插入。

至于删除,那很简单。无需额外的表格。在编辑表单上,只需创建一个大的红色删除按钮,该按钮将删除文档:_id。

编写你的JS,这样如果路径中有参数,可以看到删除按钮并将提交按钮从插入转为更新。