Javascript Meteor标题验证不起作用
我设置了meteor方法来检查当前项目的标题是否已被使用,但我没有收到我指定的警报。下面是我的“PortfolioItems”集合文件Javascript Meteor标题验证不起作用,javascript,meteor,Javascript,Meteor,我设置了meteor方法来检查当前项目的标题是否已被使用,但我没有收到我指定的警报。下面是我的“PortfolioItems”集合文件 PortfolioItems = new Mongo.Collection('portfolioItems'); Meteor.methods({ portfolioItemInsert: function(portfolioItemAttributes) { check(Meteor.userId(), String);
PortfolioItems = new Mongo.Collection('portfolioItems');
Meteor.methods({
portfolioItemInsert: function(portfolioItemAttributes) {
check(Meteor.userId(), String);
check(portfolioItemAttributes, {
title: String
});
var portfolioItemWithSameTitle = PortfolioItems.findOne({ title: portfolioItemAttributes.title});
if (portfolioItemWithSameTitle) {
return {
portfolioItemExists: true,
_id: portfolioItemWithSameTitle._id
}
}
var user = Meteor.user();
var portfolioItem = _.extend(portfolioItemAttributes, {
userId: user._id,
submitted: new Date()
});
var portfolioItemId = PortfolioItems.insert(portfolioItem);
return {
_id: portfolioItemId
};
}
});
以及submit.js文件:
Template.submit.events({
'submit #submit-form': function(e) {
e.preventDefault();
var portfolioItem = {
title: $(e.target).find('#submit-title').val()
};
Meteor.call('portfolioItemInsert', portfolioItem, function(error, result) {
if (error) {
return alert(error.reason);
}
if(result.portfolioItemWithSameTitle) {
alert('Title already taken!');
}
Router.go('portfolioItemPage', {_id: result._id});
});
}
});
另外,该项实际上不会显示为重复项,但警报不会显示为重复项。将
Meteor.userId()
更改为this.userId
像这样
check(this.userId, String);
但警报不会显示为重复
这不会发生,因为检查没有运行,所以meteor.method
上的返回语句永远不会运行,这就是为什么if(result.portfolioitemwithsametTitle)
返回false,而您不会收到警报的原因
如果你把这个放进去,你会得到提醒
if(error) {
return alert(error.reason);
}else if(result){
alert(result)
}
在submit.js中,我调用了result.portfolioitemwithsametTitle,但它应该是result.portfolioItemExists,因为在方法中,如果出现这种情况,我将变量设置为true。@Ethaan Ya是一个愚蠢的错误。在submit.hs中,我调用了result.portfolioitemwithsametTitle,但它应该是result.portfolioItemExists,因为在方法中,如果出现这种情况,我将变量设置为true。