我有一个流星模板:
<template name="personalDetailsForm">
{{> quickForm collection="PersonalDetails" id="personalDetailsForm" type="insert"}}
{{> quickForm collection="PersonalDetails" doc=editingDoc id="personalDetailsForm" type="update"}}
</template>表单如我所期望的那样显示,但是我只想要一个表单。空白表单,用于在提交表单时没有数据时执行插入操作。然后,当重新加载表单时,先前提交的数据将显示在表单上。如果表单再次提交,任何更改的数据都将被更新。
当前,insert表单正在显示,更新表单下面显示的是以前插入的数据。尝试更新第二个表单上的数据不起作用,相反,它插入了一个新记录。我想这可能是因为表单I是相同的。
理想情况下,我想做这样的事情:
<body>
{{#if PersonalDetails}}
{{> personalDetailsFormUpdate}}
{{ else }}
{{> personalDetailsFormInsert}}
{{/if}}
</body>
<template name="personalDetailsFormInsert">
{{> quickForm collection="PersonalDetails" id="personalDetailsFormInsert" type="insert"}}
</template>
<template name="personalDetailsFormUpdate">
{{> quickForm collection="PersonalDetails" doc=editingDoc id="personalDetailsFormUpdate" type="update"}}
</template>我认为这部分文档是我要找的:
对于插入和更新,我可以重用相同的quickForm或autoForm吗? 是。在各州之间翻转的代码应该按照以下顺序执行: 酌情将type属性值更改为"insert“或"update”,可能是通过更新反应性变量。可能通过更新反应性变量,将doc属性的值更改为更新的正确文档或插入的null (或包含默认值的文档)。呼叫AutoForm.resetForm(formId)。这将清除表单的任何现有验证错误。
有人能提供这方面的例子吗?
发布于 2015-05-28 17:39:00
这个问题是一段时间前提出的,但我也有同样的问题,只是解决了这个问题。
这很容易做到:
像往常一样获取上下文数据。例如,使用铁路由器,建立一条类似于:
Router.route('Options', {
path: 'options',
data: function() {
var options = Options.findOne({owner: Meteor.userId()});
return options;
}
});构建一个新的助手,检查上下文数据(在helper中)是否为空(例如用于在每个模板中工作的全局助手):
UI.registerHelper("formType", function(){
if(_.isEmpty(this)) {
return 'insert'
} else {
return 'update';
}
});使用新助手设置模板:
<template name="Options">
<h1>Options</h1>
{{> quickForm collection="Options" doc=this id="optionsForm" type=formType omitFields="owner"}}
</template>现在一切都应该正常了。如果数据库没有返回值,表单将自动切换到insert。因此,在我的示例中,如果您第一次打开表单,它将使用insert。第二次,它将使用更新。
发布于 2016-02-27 03:10:00
谢谢@peXd。这很有帮助。但是,我的模式中有一个额外的必需字段,它阻塞了insert,并且它没有插入,而且由于我从8个陷阱门无意中进入了这个解决方案,我想我应该发布它,以防它帮助其他人。
我从al契据[https://github.com/aldeed/meteor-autoform/issues/199]中找到了在客户端代码中使用这个错误钩子的建议:
AutoForm.addHooks(null, {
onError: function (name, error, template) {
console.log(name + " error:", error);
}
});然而,这也失败了,我说没有定义AutoForm。这对我来说很奇怪,因为autoform作为依赖关系被拖进了项目中。但是,为了再次检查,我做了流星添加了阿尔契奇:自动格式,直接拉它,突然,AutoForm是可用的添加钩子。
https://stackoverflow.com/questions/25373859
复制相似问题