如何制作一个字段取决于流星autoform中其他字段的值?

时间:2017-11-05 13:33:14

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

我是meteor的新手,我想创建一个表单,其中一个字段的值决定autoform中另一个字段的值。让我们将设置类型设置为“A”,“B”和“C”,因此当我选择“A”时,将加载一个autoform。我已将此表格设为通用,即它将显示所有A,B和C.

{{#each users}}
        {{> afQuickField name='userEmail' value=userEmail readOnly=true }}
        {{> afQuickField name='Setup' value=type readOnly=true}}  
        {{> afQuickField name='Profile' options='allowed' }}
        {{> afQuickField name='Purpose' }}
        {{> afQuickField name='count' options='allowed' }}
        {{> afQuickField name='PackageDirectory' options='allowed'  }}
        {{> afQuickField name="logName" options=LogName }}
 {{/each}}

计数选项应为:
1.对于“A”计数选项应为9,11,12 2.对于“B”,它是1.
3.对于“C”,它是5.
在模式中,我编写了这样的代码

Setup:{
        type: String,
        label:"Setup",
        optional:false,
       defaultValue:type
      },
 count:{
        type: String,
        label:"No. Of count",
         optional: true,
        allowedValues:["9","11","12"],
        autoform:{
          afFieldInput:{
            firstOption:"(Select the count)"
          }
        }
  }

所以当我选择设置“A”时,我应该得到三个下拉选项,当我点击“B”和“C”时,我应该分别得到默认值1和5。 任何人都可以解决我的问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用getFieldValue获取特定字段的值,并根据该字段从模板帮助器返回一组optiondefaultValue。 找到文档here

所以按照你的代码:

<强> form.html:

    ...
{{#autoForm id="sampleFormID" ... ... }}
    {{> afQuickField name='Setup' value=type readOnly=true}}  
     {{> afQuickField name='count' options=allowedOptionHelper defaultValue=defaultValueHelper }}
    ...

{{/autoForm}}

<强> form.js

Template.templateName.helpers({

    allowedOptionsHelper: function() {
        if (AutoForm.getFieldValue('Setup', 'sampleFormID') === 'A') {
            return [{label:"9", value:"9"},{label:"11",value:"11"},{label:"12", value:"12"}];
            else
            if (AutoForm.getFieldValue('Setup', 'sampleFormID') === 'B') {
                // return the options for B
            } else if (AutoForm.getFieldValue('Setup', 'sampleFormID') === 'C')) {
            // return the options for C
        }
    },

    defaultValueHelper: function() {
        if (AutoForm.getFieldValue('Setup', 'sampleFormID') === 'A') {
            return 11 //or whatever the defaultValue is;
        }
        //likewise for options B and C
    }

});

<强> schema.js

...
...
 count:{
        type: String,
        label:"No. Of count",
         optional: true,
        autoform:{
          afFieldInput:{
            firstOption:"(Select the count)"
          }
        }
  }
...
...