JS / Meteor:如果在数组

时间:2015-12-02 02:07:57

标签: javascript arrays meteor meteor-blaze

我创建了一个表单,如果选中选项的复选框,则在表单提交时,它会将已检查输入的值传递给cuisineType子模式中的字符串数组venueAttributes

我正在尝试构建等效的更新表单,我需要:

  1. 查看输入的值字段(例如:'american')是否在数组中。
  2. 如果值包含在数组中,则返回'checked'(或将复选框标记为已选中)。
  3. 这是我到目前为止所做的,但不确定我是否走在正确的道路上。我应该在下划线中使用._find()吗?

    <label>Type of Cuisine</label>
    {{#each venueAttributes.cuisineType}}
      <div class="form-group" id="cuisineForm">     
        <div class="checkbox">
          <label><input type="checkbox" checked="???" name="american" id="american" value="american">American</label>
        </div>
        <div class="checkbox">
          <label><input type="checkbox" checked="???" name="french" id="french" value="french">French</label>
        </div>
      </div>
    {{/each}}
    

    感谢您提供的任何见解! 丹

1 个答案:

答案 0 :(得分:1)

因为您无论如何都要在venueAttributes.cuisineType上进行迭代,所以只需要一个子项:

<template name="cuisines">
<label>Type of Cuisine</label>
{{#each venueAttributes.cuisineType}}
  <div class="form-group" id="cuisineForm">     
    <div class="checkbox">
      <label><input type="checkbox" checked={{isChecked}} name={{this}}
        id={{this}} value={{this}}>{{this}}</label>
    </div>
  </div>
</div>
{{/each}}
</template>

现在您需要isChecked帮助程序来决定是否检查给定项目。

Template.cuisines.helpers({
  isChecked: function(){
    return ( checkedCuisines.indexOf(this) > -1 );
  }
});

但是,问题!

你的问题是:

  

将已检查输入的值传递给字符串数组   (cuisineType,在placesAttributes subschema内)。

但是您在此模板中循环venueAttributes.cuisineType,因此根据定义,该数组仅包含先前已检查过的项目。我使用不同的数组checkedCuisines进行检查,但这意味着您在模板中迭代的对象必须包含所有菜肴类型,而不仅仅包括已检查过的菜单类型。在某个地方你需要一个集合或所有美食类型的数组来迭代。