有没有办法使用Meteor,AutoForm和SimpleSchema使数组对象字段的选项有效?

时间:2018-03-06 16:54:13

标签: javascript node.js meteor meteor-autoform simple-schema

请检查以下图片: AutoForm generated Array of Objects

现在我们在模式中定义了这个对象数组,如下所示:

`destinationCountry: {
    type: Array,
    label: () => {return TAPi18n.__('destinationCountry.label')},  
    minCount:1,
    maxCount:5,
},
'destinationCountry.$': {
    type: Object,
    label:()=>{ return " "},

},
'destinationCountry.$.country':{
    type:String,
    autoform:{ 
    type: "select2",
    'data-placeholder': () => {return TAPi18n.__('destinationCountry.placeholder')},
    options: () => {return TAPi18n.__('countryList', {returnObjectTrees:true, joinArrays:false})}, 
    afFieldInput: {
        multiple: false,
        width: 'resolve',

      },
      afQuickField: {
        'panelClass': 'col'
    },
}
},
'destinationCountry.$.days':{
    type:String,
    autoform:{
        type:"select",
        options:function (){
         // here is where the suggested code would go
        },

    }

},`

现在,有没有什么方法可以让日期中的选项对前一个数组索引对象中为$ .days选择的选项有反应?我们希望如果所有$ .days字段中的最大天数为20,那么只要您在其中一个字段中选择13,则所有其他$ .days选择字段中只有7个可用。我们怎样才能实现这种反应?

更新1:

我尝试了以下内容:

'destinationCountry.$.days': {
    type: String,
    autoform: {
        type: "select",
        options: function () {
            let arr = [...Array(days.get())].map((v, i) => i);
            let finalArr = [{
                label: "Connection Flight",
                value: 0
            }]
            arr.map((v, i) => {
                finalArr.push({
                    label: (v + 1).toString(),
                    value: i + 1
                })
            });

            if (this.name == 'destinationCountry.0.days') {
                var usedDays = 0;
                var usedArr;
                if (AutoForm.getFormValues('step2') == null) {
                    usedArr = []
                    console.log("usedArr", usedArr)
                } else {
                    usedArr = AutoForm.getFormValues('step2').insertDoc.destinationCountry
                    console.log("usedArr", usedArr)
                }

                for (let index = 0; index < usedArr.length; index++) {
                    const element = Number(usedArr[index].days);
                    usedDays += element
                }
                console.log("finalArr", finalArr)
                if (usedDays == 0) {
                    console.log('usedDays', usedDays)
                    return finalArr
                } else if (usedDays > 0) {
                    newFinalArr = finalArr.slice(0, "-" + (usedDays));
                    return newFinalArr
                }
            }

            if (this.name == 'destinationCountry.1.days') {
                var usedDays = 0;
                var usedArr;
                if (AutoForm.getFormValues('step2') == null) {
                    usedArr = []
                    console.log("usedArr", usedArr)
                } else {
                    usedArr = AutoForm.getFormValues('step2').insertDoc.destinationCountry
                    console.log("usedArr", usedArr)
                }

                for (let index = 0; index < usedArr.length; index++) {
                    const element = Number(usedArr[index].days);
                    usedDays += element
                }
                console.log("finalArr", finalArr)
                if (usedDays == 0) {
                    console.log('usedDays', usedDays)
                    return finalArr
                } else if (usedDays > 0) {
                    newFinalArr = finalArr.slice(0, "-" + (usedDays));
                    return newFinalArr
                }
            }
        },

    }

},

First days option array gets erased when adding the second array object...

现在每次在第一个destinationCountry.0.days中选择一个选项时,1.days选项会根据您在0.days字段中选择的数字正确减少。但它重新渲染并删除在前0.days中选择的选项。有没有办法设置和保持为第一个0.days字段选择的值?

0 个答案:

没有答案