如何使用相同的表单在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}}">
答案 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,这样如果路径中有参数,可以看到删除按钮并将提交按钮从插入转为更新。