Подтвердить что ты не робот

Метеор: пользовательский автоформат с массивом объектов

У меня есть SimpleSchema, который включает в себя массив объектов:

Things.attachSchema( new SimpleSchema({
    name: {
        type: String,
        label: "Name",
        max: 50
    },
    fields: { 
        type: [Object],
    },
    fields.$.name: {
        type: String
    },
    fields.$.amount: {
        type: Number
    }
}) )

Я пытаюсь создать пользовательскую форму, используя afEachArrayItem, но я не могу понять, как обращаться к атрибутам каждого объекта в массиве.

Мой шаблон выглядит так (с отключенным html):

{{#autoForm collection="things" id="myForm" }}
    {{> afQuickField name='schemaName'}}

    {{#afEachArrayItem name="fields"}}

        {{> afFieldInput name="name"}  
        {{> afFieldInput name="amount"}

    {{/afEachArrayItem}}

{{/autoForm}}

Что нужно передать "name" в afFieldInputs?

4b9b3361

Ответ 1

Чтобы получить доступ к полям объектов в массиве, вы можете использовать:

this.current

Итак, чтобы исправить приведенный выше пример, используйте:

{{#autoForm collection="things" id="myForm" }}
    {{> afQuickField name='schemaName'}}

    {{#afEachArrayItem name="fields"}}

        {{> afFieldInput name=this.current.name}}  
        {{> afFieldInput name=this.current.amount}}

    {{/afEachArrayItem}}

{{/autoForm}}

Я не знаю, правильно ли это делается, но, похоже, это работает.

Ответ 2

Вы можете добавлять кнопки для добавления/удаления элементов массива так:

{{#autoForm collection="things" id="myForm" }}
    {{> afQuickField name='schemaName'}}

    {{#afEachArrayItem name="fields"}}

        <button type="button" class="btn btn-primary autoform-remove-item"><span class="glyphicon glyphicon-minus"></span></button>
        {{> afFieldInput name=this.current.name}}  
        {{> afFieldInput name=this.current.amount}}

    {{/afEachArrayItem}}
    <button type="button" class="btn btn-primary autoform-add-item" data-autoform-field="fields"><span class="glyphicon glyphicon-plus"></span></button>

{{/autoForm}}

Это будет использовать встроенные кнопки и значки для AutoForm, поэтому не стесняйтесь изменять HTML-код по мере необходимости.