Meteor Collections以及何时使用模式

时间:2015-06-23 23:34:28

标签: javascript mongodb checkbox meteor collections

我开始构建一个应用程序并拥有一个用于创建宠物帖子的集合。

注意:我正在使用以下包来构建我的集合模式,Simple Schema https://atmospherejs.com/aldeed/simple-schema

我用于将数据插入此特定集合的页面有一个部分,该部分基于用户所做的选择,为他们提供了更多选项。

例如,专注于一个问题,有一些复选框,默认情况下没有选中,但如果用户选择任何复选框,则会通过复选框或文本区域为其提供更多选项供选择。重点是他们将根据他们的选择提供其他选择。

我认为处理数据插入方式的最佳方法是通过特定部分的模板助手,这不是问题。

相反,我感到困惑的是收集级别以及如何构建该信息或者我是否需要。

例如,假设您有一个涉及宠物的问题。

问题可能是:你有宠物吗?

复选框选项可以是:

  1. 其他
  2. 默认情况下,所有这些复选框都未选中,但如果用户选中任何一个框,则会显示一个文本区域(我再次意识到所有这些都发生在Template.events和Template.helpers级别)。

    我真正的问题是,现在我已经设置了这个场景,你是如何存储这样的信息或者为了允许这些类型的模式而存储的。

    假设获取此数据的所有函数都在Template.helpers级别上,因此这是一个关于如何在此场景中存储数据类型的问题。

    我的想法是做这样的事情(使用simpleSchema包):

    Pet = new SimpleSchema({
     petInstructions: {
      type: String,
      optional: true,
      allowedValues: ['Dogs', 'Cats', 'Other']    
     }
    });
    

    但是我不确定这是否正确让我重新思考我确实希望复选框具有值'狗','猫','其他'以及检查其中任何一个时的文本区域最终用户可以输入有关其宠物的更多信息。

    我不清楚的是,如果我正在考虑这些数据的Schema是如何形成的,或者这种信息应该如何存储在MongoDB中。

    我觉得TextArea输入也应该有一个属性,这是一个考虑它的好方法吗?

    例如(添加上面的示例):

    Pet = new SimpleSchema({
         petInstructions: {
          type: String,
          optional: true,
          allowedValues: ['Dogs', 'Cats', 'Other'],
          textArea: ""
         }
        });
    

    我应该为该特定内容留下另一个属性/值吗?

    这是一个细微程度的问题,理解这样简单的事情有助于澄清我的其他问题。

    谢谢。

1 个答案:

答案 0 :(得分:1)

这就是我如何构建它。这是关于如何针对另一个字段验证字段以及如何有条件地要求值的自动表格说明 - https://github.com/aldeed/meteor-simple-schema#best-practice-code-examples

Pet = new SimpleSchema({
  pet: {
    type: Object,
    optional: true
  },
  "pet.type": {
    type: String,
    optional: true,
    allowedValues: ['Dogs', 'Cats', 'Other']
  },
  "pet.instructions": {
    type: String,
    optional: true,
    custom: function(){
        var petType = this.field('pet.type').value;
        // if the user selects a pet type then instructions should be required
        if (petType){
            return "required";
        };
    }
  }
});

在旧代码中:

Pet = new SimpleSchema({
     petInstructions: {
      type: String,
      optional: true,
      allowedValues: ['Dogs', 'Cats', 'Other'],
      textArea: ""
     }
    });

您确实声明,对于petInstructions键,您只允许值为Dogs,Cats或Other,但您还希望其中一个键是textArea,其中包含其他一些数据,而不是&# 39; t太有意义了。 SimpleSchema希望您为每个键定义一个特定的数据点。