Collection2的文档说明了如何创建Schema,以及如何将Schema附加到集合,但是我认为缺少一个完整的工作示例,该示例具有插入/更新表单,错误处理和自动表单。
如何更改现有项目以使用Collection2?特别:
我还需要check(Meteor.userId(), String);
吗?
我完全不需要再打check()
吗?
我可以删除验证码吗?我只是调用insert()
,而由于该模式,Collection2将捕获所有错误?
我还有什么要改变的?
这是DiscoverMeteor的示例代码:
Meteor.methods({
postInsert: function(postAttributes) {
check(Meteor.userId(), String);
check(postAttributes, {
title: String,
url: String
});
var errors = validatePost(postAttributes);
if(errors.title || errors.url) {
throw new Meteor.Error('invalid-post', 'Set a title and valid URL for your post');
}
var user = Meteor.user();
var post = _.extend(postAttributes, {
userId: user._id,
author: user.username,
submitted: new Date(),
commentsCount: 0
});
var postId = Posts.insert(post);
return {
_id: postId
};
}
});
validatePost = function(post) {
var errors = {};
if(!post.title) {
errors.title = "Please fill in a headline";
}
if(!post.url) {
errors.url = "Please fill in a URL";
} else if(post.url.substr(0, 7) != "http://" && post.url.substr(0, 8) != "https://") {
errors.url = "URLs must begin with http:// or https://";
}
return errors;
}
更新为使用Collection2时,此代码的外观如何?
最佳答案
我和您在同一条船上,我基本上使用autoform来执行keyUp
验证,仅此而已。
简而言之,collection2将运行_.pick的等效项,跳过空字符串,尝试将输入强制转换为模式类型,验证文档,并运行模式自动值功能。check()
不会强制转换值,因此,在某些情况下,它很有用,但通常不需要。
它的验证只不过是防止插入。因此,您仍然需要一些代码来改善用户体验,并向他们展示他们已经搞砸的地方。