Метеор: пользовательский автоформат с массивом объектов
У меня есть 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?
Ответы
Ответ 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-код по мере необходимости.