如何将Meteor.js插入嵌套对象?

时间:2014-07-16 02:03:45

标签: javascript meteor nested

我想制作一个游戏数独的对象模型。所以我不确定如何处理嵌套数据。

 Meteor.methods({
                inputDatabase : function(options){
                    check(options,{
                        a1: {value:Number, display:String},
                        ....
                        ....
                        a9: {value:Number, display:String}
                    });


            if(options.a1.value.length ===0 && options.a1.value.length >= 2){
                        throw new Meteor.Error(413, "Please input a single digit number.")
                    }
                    if(options.a1.display.length ===0){
                        throw new Meteor.Error(413, "Please choose show/hide.")
                    }

////////////在这里运行代码a1直到a9 //////////////

                    Database.insert({
                        a1: {value:options.a1.value, display:options.a1.display}, ///start    form a1 - a9
                        ... 
                        ...
                        ...
                        a9: {value:options.a9.value, display:options.a9.display}
                });
            });

1 个答案:

答案 0 :(得分:0)

好的以下所有人我都经过测试并且运作良好。

clientMiniSudoku.js

var arrangeOptions = function(inA1,cbA1,inA2,cbA2,inA3,cbA3,inA4,cbA4,inA5,cbA5,inA6,cbA6,inA7,cbA7,inA8,cbA8,inA9,cbA9) {
    var inA1 = $("#inA1").val(),inA2 = $("#inA2").val(),inA3 = $("#inA3").val(),inA4 = $("#inA4").val(),inA5 = $("#inA5").val(),inA6 = $("#inA6").val(),inA7 = $("#inA7").val(),inA8 = $("#inA8").val(),inA9 = $("#inA9").val();
    var cbA1 = $("#cbA1:checked").val(), cbA2 = $("#cbA2:checked").val(), cbA3 = $("#cbA3:checked").val(), cbA4 = $("#cbA4:checked").val(), cbA5 = $("#cbA5:checked").val(), cbA6 = $("#cbA6:checked").val(), cbA7 = $("#cbA7:checked").val(), cbA8 = $("#cbA8:checked").val(), cbA9 = $("#cbA9:checked").val();

    if(!_.isEmpty(inA1) && !_.isEmpty(inA2) && !_.isEmpty(inA3) && !_.isEmpty(inA4) && !_.isEmpty(inA5) && !_.isEmpty(inA6) && !_.isEmpty(inA7) && !_.isEmpty(inA8) && !_.isEmpty(inA9)){

        var resultObject = {a1:{value: inA1, checkbox: cbA1},
                            a2:{value: inA2, checkbox: cbA2},
                            a3:{value: inA3, checkbox: cbA3},
                            a4:{value: inA4, checkbox: cbA4},
                            a5:{value: inA5, checkbox: cbA5},
                            a6:{value: inA6, checkbox: cbA6},
                            a7:{value: inA7, checkbox: cbA7},
                            a8:{value: inA8, checkbox: cbA8},
                            a9:{value: inA9, checkbox: cbA9}
                        };
        return resultObject;
    }else {
        return "Please input numbers in any field.";
    }
}

Template.miniSudoku.helpers({
    showData: function(){

    },
    errorInput: function(){
        return Session.get("Error");
    }
});

Template.miniSudoku.events({
    'click #inputData': function(event){
        event.preventDefault();
        Session.set("options", arrangeOptions());
        var options = Session.get("options");
        if(Meteor.userId() && !_.isEmpty(options)){
            if(_.isObject(options)){
                Meteor.call('inputDatabase',options, function(){
                    Session.set("Error", "Data was inserted.");

                    $("#inA1").val("");
                    $("#cbA1").prop('checked', false);

                    $("#inA2").val("");
                    $("#cbA2").prop('checked', false);

                    $("#inA3").val("");
                    $("#cbA3").prop('checked', false);

                    $("#inA4").val("");
                    $("#cbA4").prop('checked', false);

                    $("#inA5").val("");
                    $("#cbA5").prop('checked', false);

                    $("#inA6").val("");
                    $("#cbA6").prop('checked', false);

                    $("#inA7").val("");
                    $("#cbA7").prop('checked', false);

                    $("#inA8").val("");
                    $("#cbA8").prop('checked', false);

                    $("#inA9").val("");
                    $("#cbA9").prop('checked', false);
                });
            }else{
                Session.set("Error", "Data error.");
                console.log(options);
            }
        }else{
            Session.set("Error", "Please login before input.")
        }
    }
});

model.js

MiniSudoku = new Meteor.Collection(" MiniSudoku");

Meteor.methods ({
    inputDatabase : function(options){
        MiniSudoku.insert({
            a1: {value: options.a1.value, checkbox: options.a1.checkbox},
            a2: {value: options.a2.value, checkbox: options.a2.checkbox},
            a3: {value: options.a3.value, checkbox: options.a3.checkbox},
            a4: {value: options.a4.value, checkbox: options.a4.checkbox},
            a5: {value: options.a5.value, checkbox: options.a5.checkbox},
            a6: {value: options.a6.value, checkbox: options.a6.checkbox},
            a7: {value: options.a7.value, checkbox: options.a7.checkbox},
            a8: {value: options.a8.value, checkbox: options.a8.checkbox},
            a9: {value: options.a9.value, checkbox: options.a9.checkbox}
        });
    }
});