2014-06-07 32 views
3

如何在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

使用第二个更新和插入。未定义的{{姓名}}只是计算为空字符串。 –

回答

0

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

然而,有一些程序,它可以使更容易这项任务:

autoform,简单模式和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"}} 

(随着“页”是文件本身提供的模板)

这些车把助手会产生整个表格,你甚至可以和他们一起验证。

+0

好吧,我知道如何使用两种形式,一种用于插入,一种用于编辑,但我不想为每种文档类型创建2或3种形式(也用于删除)。 –

+0

我也尝试过使用autoform,使用“this”作为文档句柄,但它不能正常工作。并且更新挂钩文件记录不完善,并且不更新文档。 –

0

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

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

您创建一个去/my-form/XYZ123

您已经创建了该文件的路径链接:_id作为参数。

然后,您将路径设置为读取路径的_id参数作为数据。 (以发现流星本书为例)

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

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

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

编写您的JS,以便如果路径中有参数,请使删除按钮可见并将提交按钮从插入更改为更新。

2

(使用流星0.9。3 +铁路由器)

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

<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}} 
    ... 

在我的路由器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

+0

好戏!将使用。 – Andy

相关问题