我想在我的Meteor html模板中有一个表单,然后提交将该数据插入我的MongoDB列表。我的问题是:
答案 0 :(得分:16)
JQuery包含在流星&非常简化,你为什么要避免它?用js
手动遍历dom很长您可以使用javascript提交表单ajax样式:
所以你可以像往常一样在你的模板中使用普通的表单html:
// HTML
<form id="myform">
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
// Client JS
function submitme() {
form = {};
$.each($('#myform').serializeArray(), function() {
form[this.name] = this.value;
});
// Do validation on
// form = {
// firstname: 'first name',
// lastname: 'last name',
// email: 'email@email.com'
// }
MyCollection.insert(form, function(err) {
if(!err) {
alert("Submitted!");
$('#myform')[0].reset();
} else {
alert("Something is wrong");
console.log(err);
}
});
}
您可以绑定选择按钮以在单击时插入数据:
事件地图绑定:
Template.templatename.events({
'submit' : function(event) {
event.preventDefault(); //prevent page refresh
submitme();
}
});
如果您 HATE jQuery&amp;无法使用它
// HTML
<form id="myform">
<input id="firstname" type="text" name="firstname"/>
<input id="lastname" type="text" name="lastname"/>
<input id="email" type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
// Client JS
function submitme() {
form = {
firstname: firstname.value,
lastname: lastname.value,
email: email.value
};
// Do validation on
// form = {
// firstname: 'first name',
// lastname: 'last name',
// email: 'email@email.com'
// }
MyCollection.insert(form, function(err) {
if (!err) {
alert("Submitted!");
// Empty field values
email.value = "";
firstname.value = "";
lastname.value = "";
} else {
alert("Something is wrong");
console.log(err);
}
});
}
答案 1 :(得分:11)
仅供参考,在没有所有全局jQuery引用的情况下,在Meteor中执行表单有一种稍微更简洁的方法,我发现它很混乱。它通过作用于事件处理程序中提供的模板使代码更容易出错。以下是使用其他答案中描述的表单的示例:
模板代码:
<template name="foo">
<form id="myform">
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="text" name="email"/>
<input type="submit" id="submit"/>
</form>
</template>
事件处理程序:
Template.foo.events({'submit form' : function(event, template) {
event.preventDefault();
firstname = template.find("input[name=firstname]");
lastname = template.find("input[name=lastname]");
email = template.find("input[name=email]");
// Do form validation
var data = {
firstname: firstname.value,
lastname: lastname.value,
email: email.value
};
email.value="";
firstname.value="";
lastname.value="";
MyCollection.insert(data, function(err) { /* handle error */ });
}});
答案 2 :(得分:7)
最简单,最简单的解决方案。
// HTML
<template name="formTemplate">
<form>
<input type="text" name="firstname"/>
<input type="text" name="lastname"/>
<input type="submit" id="submit"/>
</form>
</template>
// JavaScript
Template.formTemplate.events({
'submit form': function(event, template) {
event.preventDefault(); // prevent page reload
var firstname = event.target.firstname.value;
var lastname = event.target.lastname.value;
}
});
答案 3 :(得分:1)
想要分享我的方式,这很简单:
HTML:
<form id="update-profile">
<div class="form-group">
<input type="text" required class="form-control" name="name" placeholder="Full Name" value="{{profile.name}}">
</div>
...
JS
Template.profileEditModal.events({
'submit form': function (e, t) {
e.preventDefault();
var doc = {};
t.$('input').each(function () {
if (this.value) {
doc[this.name] = this.value;
}
});
});
结果很干净Object {name: "...", email: "..."}
如果您正在使用SimpleSchema
对check(doc, Schemas.updateProfile);
进行验证。
答案 4 :(得分:0)
这并不能完全回答你的问题。但这就是我要做的。
meteor add aldeed:autoform
您已有的示例架构......
Books = new Mongo.Collection("books");
Books.attachSchema(new SimpleSchema({
title: {
type: String,
label: "Title",
max: 200
},
author: {
type: String,
label: "Author"
},
copies: {
type: Number,
label: "Number of copies",
min: 0
},
lastCheckedOut: {
type: Date,
label: "Last date this book was checked out",
optional: true
},
summary: {
type: String,
label: "Brief summary",
optional: true,
max: 1000
}
}));
3。 books.tpl.jade(来自mquandalle:jade)
+quickForm collection="Books" id="insertBookForm" type="method" meteormethod="insertBook"
4
Meteor.methods({
'insertBook': function (doc) {
// server side validation, insert, error etc...
}
})
通过这种方式,您可以免费获得免费的引导样式的客户端验证,如果需要,可以自定义字段可见性或样式。对于5分钟的开发,这是一个非常好的回报。 我会使用其他人花时间和思考的强大软件包,并在此基础上快速构建。