0

我得到了这些会话:

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”(我知道我可以使用正则表达式来做到这一点,但我更喜欢使用流星检查和匹配来做到这一点)。

正在做:

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

似乎乏味和错误。

4

1 回答 1

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")},...)
}

显然,如果您需要应用更复杂的验证,而不是简单地检查值是否为假,那么您必须在每个数据字段的基础上进行,绝对没有其他方法。例如:

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

于 2013-10-16T15:13:58.373 回答