流星标题验证不起作用

时间:2015-02-16 05:01:05

标签: javascript meteor

我设置了一个流星方法来检查当前项目的标题是否已被使用,但我没有收到我指定的警报。以下是我的" 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。该项目实际上不会显示为重复项,但警告不会显示该项目是重复的。

2 个答案:

答案 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,如果是这样的话。