仅当特定会话/会话不为假时,meteor才允许Collection.insert

时间:2013-10-16 13:54:37

标签: javascript session collections meteor

我收到了那些会议:

Session.set("group_name",false);
Session.set("group_date",false);
Session.set("group_friends",false);
Session.set("group_location",false);
Session.set("group_rules",false);
Session.set("group_desc",false);
Session.set("group_save",false);

我希望用户只有在所有Sessions的值都不为false并且该值有效时才能插入 例如,组名不能是“123”或“a”(我知道我可以使用regexp来做,但我更喜欢使用流星检查和匹配)。

做的:

       if(Session.get("group_date") != false && Session.get("group_friends") != false && ...){
CollectionName.insert({name:Session.get("group_name")},...)
    }

看起来很单调乏味。

1 个答案:

答案 0 :(得分:2)

为什么不创建一个Session var而不是7:

Session.set("group", {
    name: false,
    date: false
    //etc...
})

然后,如果您需要更新其中任何一个:

var group = Session.get("group");
group.name = "Bob";
Session.set("group", group);

现在在你的方法中你可以使用for(key in Session.get("group"))迭代属性,或者只使用Meteor内置的Underscore:

var group = Session.get("group");
if(_.all(group, function(val) { return !!val; }){ //checks that all properties of group are not false
    CollectionName.insert({name:Session.get("group_name")},...)
}

显然,如果你需要应用更复杂的验证,而不仅仅是检查值是否为false,那么你必须在每个数据域的基础上进行,绝对没有别的办法。 E.g:

var group = Session.get("group");

check(group, validateGroup);

CollectionName.insert({name:Session.get("group_name")},...)

function validateGroup(group){
    check(group, {
        name: String,
        date: Date
        //etc.
    }

    if(group.name.length < 3 || group.name == "whatever else you need to compare it to"){
    return false;
}
 //further validation...

有关此内容的更多信息:http://docs.meteor.com/#matchpatterns