我设置了一个流星方法来检查当前项目的标题是否已被使用,但我没有收到我指定的警报。以下是我的" PortfolioItems"收集文件。
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});
});
}
});
PS。该项目实际上不会显示为重复项,但警告不会显示该项目是重复的。
答案 0 :(得分:1)
将Meteor.userId()
更改为this.userId
喜欢这个
check(this.userId, String);
但警告不会显示它是重复的。
这不会发生,因为支票没有运行,因此meteor.method
上的返回状态永远不会显示为什么if(result.portfolioItemWithSameTitle)
返回false并且您没有得到警报。
如果你这样做,你将收到警报
if(error) {
return alert(error.reason);
}else if(result){
alert(result)
}
答案 1 :(得分:1)
在submit.js中我调用了result.portfolioItemWithSameTitle,但它应该是result.portfolioItemExists,因为在方法中我将变量设置为true,如果是这样的话。