【问题标题】:Meteor change collection on user dropdown selection用户下拉选择上的流星变化集合
【发布时间】:2016-09-18 09:31:41
【问题描述】:

我将 Meteor 与 autoForm / quickForm 结合使用。我有收藏,在这个例子中我们称之为“运动”。该集合使用下拉列表(autoForm 中的allowedValues)询问用户本周完成了哪些运动。现在如果用户选择跑步,我想显示“距离”、“区域”等。如果用户选择篮球,我可能想显示“投篮次数”等。

我应该怎么做?创建多个集合或 SimpleSchema,还是有不同的首选方法?在谷歌上找不到任何东西,但我相信这不是一个不常见的问题。如果有人有更多信息的链接,已经非常感谢了。


更新:

我正在使用“每个”循环来遍历我之前定义的所有可能的运动。您认为为每种不同的运动创建一个表单项更有意义吗?如果是这样,我如何确保在架构中正确配置它?提前谢谢!

{{#autoForm collection="Sports" type="update" doc=this id="FieldValueIsForm"}}
  {{#each sports}}
    <h3>{{this.name}}</h3>
    {{> afQuickField name="sports.$.sportTrue" noselect=true }}

    {{#if afFieldValueIs name="sports.$.sportTrue" value=true}}
      {{> afQuickField name="sports.$.sportDistance" value=this.frequency}}
    {{/if}}
  {{/each}}

  <div>
    <button type="submit">Submit</button>
  </div>
{{/autoForm}}

更新 2:

我的架构可以在这里找到:http://pastebin.com/SbBSbqW2 我简化了一点,但这是主要内容。对于不同的运动,我需要不同的输入字段。

【问题讨论】:

  • 当你说,“如果用户选择跑步,我想显示‘距离’、‘面积’等”,你的意思是你想在 UI 中显示这些数据还是你想要额外的显示供用户选择/更新的选项?
  • @NFab 抱歉,如果该部分不清楚。我的意思是我希望向用户显示其他选项以便能够选择/更新。这些在不同的条件下可以是不同的类型。
  • 您可以添加您当前的架构吗?了解数据库中数据的结构和组织方式会很有帮助。
  • @NFab 已更新架构。感谢您的帮助。

标签: meteor meteor-autoform


【解决方案1】:

听起来您想使用带有条件的afQuickField 选项。文档讨论了它here。还有一个演示代码应该是什么样子here;但是,它看起来像这样:

{{#autoForm collection="FieldValueIs" type="insert" id="FieldValueIsForm"}}
  {{> afQuickField name="a" options="allowed" noselect=true}}
  {{#if afFieldValueIs name="a" value="foo"}}
    {{> afQuickField name="b"}}
  {{/if}}
{{/autoForm}}

您只需确保将“a”和“b”设置为您想要的选择字段,方法是在您的架构中正确设置它们。

更新:

我假设您想在SingleSport 集合中存储距离、拍摄的照片等。具体如何存储它取决于您,但它可能类似于以下内容:

SingleSport = new SimpleSchema({
  sportType: {
    type: String
  },
  distanceRun: {
    type: Number,
    decimal: true,
    optional: true
  },
  shotsTaken: {
    type: Number,
    optional: true
  },
  sportTrue: {
    type: Boolean,
    label: "Sport completed",
    autoform:{
        type: "boolean-radios",
        trueLabel: "Enabled",
        falseLabel: "Disabled",
        value: false
    }
  }
});

然后,您可以像这样更改表单的条件部分:

{{#if afFieldValueIs name="sportType" value="running"}}
  {{> afQuickField name="distanceRun"}}
{{/if}}
{{#if afFieldValueIs name="sportType" value="basketball"}}
  {{> afQuickField name="shotsTaken"}}
{{/if}}

【讨论】:

  • 感谢您的回答@NFab。这部分有效。我已经更新了我的问题,以反映这给我带来的问题。简而言之,我有一个 each 循环来显示所有运动,这将简单地显示所有运动的选项。
  • @WalterB,我已根据您的更新更新了我的答案。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2017-11-05
  • 2016-11-30
  • 2017-01-29
相关资源
最近更新 更多