meteor-autoform:数组只包含一个条目

meteor-autoform: Array contains only one entry

这是我的问题。

我有一个必须链接到多个 SIRET 号码的组织。为此,我有一个自动表单(版本 7.0.0),它可以在创建组织时链接 0 个、一个或多个 SIRET 号码。

form-for-add

当我提交我的表格时,我的对象只包含一个 SIRET 号码,而我输入了 2 :

{ "label": "My Organization","siret": ["12345678910112"] }

这是我的代码:

schemas.js :

static organisation = new SimpleSchema({
    "label": {
        type: String,
        label: function () { return i18n.__("schema.organisation.label"); },
        autoform: {
            autocomplete: "off"
        },
        optional: false
    },
    "siret": {
        type: Array,
        label: function () { return i18n.__("schema.organisation.siret"); },
        optional: true,
        minCount: 1,
        maxCount: 5
    },
    "siret.$": {
        type: String,
        label: function () { return i18n.__("schema.organisation.siret"); },
        optional: true,
        min: 14,
        max: 14,
    },}, { tracker: Tracker })

添加 SIRET 的部分表格:

<div class="tab-pane fade" id="siret10">
                {{#afEachArrayItem name="siret"}}
                <div class="siret-input-container">
                    {{> afFieldInput name="siret"}}
                </div>
                <div class="siret-delete-button-container">
                    <button type="button" class="btn btn-sm btn-danger delete autoform-remove-item">
                        <svg alt="delete" width="100%" height="100%" fill="currentColor" aria-hidden="true"
                            focusable="false" class="overflow-visible">
                            <use xlink:href="/images/sprite.svg#picto_Delete"></use>
                        </svg>
                    </button>
                </div>
                {{/afEachArrayItem}}
                <button type="button" class="btn btn-primary autoform-add-item"
                    data-autoform-field="siret"><span>{{__"organisationManagement.addSiret"}}</span></button>
            </div>

感谢您的帮助!

您的字段是一个数组字段,但在 afEachArrayItem 循环中您始终 re-define 您的字段(来自 data-perspective)相同:

{{> afFieldInput name="siret"}}

提交此内容会将所有值覆盖到 siret[0]

但是,您需要将这些字段命名为 siret.0、...、siret.10

为此,您可以在 afEachArrayItem 中使用 this.index 并将其包装到帮助程序中:

{{> afFieldInput name=(mergeStr "siret" this.index)}}

帮手可能是这样的:

Template.someTemplate.helper({
  mergeStr(name, index) {
    return `${name}.${index}`
  }
})

为输入使用索引名称将使其有效。